from sqlalchemy.orm import Session
from sqlalchemy import and_
from app.db.models import VkGroup
from app.core.config import get_settings
from app.utils.encryption import decrypt_token


async def get_vk_token(tenant_id: int, db: Session = None) -> str | None:
    """
    Получить токен VK группы для отправки сообщений
    
    Args:
        tenant_id: ID тенанта
        db: Optional database session. If None, creates a new one.
    
    Returns:
        str: Токен VK группы для отправки
        None: Если нет доступных групп
    """
    if db is None:
        from app.db.session import SessionLocal
        db = SessionLocal()
        try:
            return await _get_vk_token_impl(tenant_id, db)
        finally:
            db.close()
    else:
        return await _get_vk_token_impl(tenant_id, db)


async def _get_vk_token_impl(tenant_id: int, db: Session) -> str | None:
    """Внутренняя реализация получения VK токена"""
    settings = get_settings()
    
    # Получаем первую активную VK группу для тенанта
    vk_group = db.query(VkGroup).filter(
        and_(
            VkGroup.tenant_id == tenant_id,
            VkGroup.status == "active"
        )
    ).first()
    
    if vk_group:
        # Расшифровываем токен
        decrypted_token = decrypt_token(vk_group.access_token_enc)
        if decrypted_token:
            return decrypted_token
    
    # Fallback на переменную окружения (для обратной совместимости)
    if settings.VK_GROUP_TOKEN:
        return settings.VK_GROUP_TOKEN
    
    return None

