"""
API endpoints для настройки Telegram канала (выбор типа отправки: Bot или MTProto)
"""
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from pydantic import BaseModel

from app.db.session import get_db
from app.db.models import User, TenantSettings
from app.api.deps import get_current_user

router = APIRouter()


class TelegramSenderUpdate(BaseModel):
    tg_sender: str  # system, brand, mtproto, disabled
    mtproto_account_id: int | None = None  # ID MTProto аккаунта (если tg_sender == "mtproto")


@router.get("/telegram/settings")
async def get_telegram_settings(
    current_user: User = Depends(get_current_user),
    db: Session = Depends(get_db)
):
    """Получить настройки Telegram канала для тенанта"""
    from app.db.models import TelegramMtprotoAccount
    
    settings = db.query(TenantSettings).filter(
        TenantSettings.tenant_id == current_user.tenant_id
    ).first()
    
    if not settings:
        # Создаем дефолтные настройки
        settings = TenantSettings(
            tenant_id=current_user.tenant_id,
            tg_sender="system"
        )
        db.add(settings)
        db.commit()
        db.refresh(settings)
    
    # Получаем список всех MTProto аккаунтов (не только active, чтобы показывать pending_auth тоже)
    mtproto_accounts = db.query(TelegramMtprotoAccount).filter(
        TelegramMtprotoAccount.tenant_id == current_user.tenant_id
    ).all()
    
    return {
        "tg_sender": settings.tg_sender or "system",
        "mtproto_account_id": settings.mtproto_account_id,
        "available_mtproto_accounts": [
            {
                "id": acc.id,
                "name": acc.name,
                "phone": acc.phone,
                "username": acc.username,
                "is_default": acc.is_default,
                "status": acc.status
            }
            for acc in mtproto_accounts
        ]
    }


@router.put("/telegram/settings")
async def update_telegram_settings(
    data: TelegramSenderUpdate,
    current_user: User = Depends(get_current_user),
    db: Session = Depends(get_db)
):
    """Обновить настройки Telegram канала"""
    from app.db.models import TelegramMtprotoAccount
    
    # Валидация
    if data.tg_sender not in ["system", "brand", "mtproto", "disabled"]:
        raise HTTPException(
            status_code=400,
            detail="tg_sender должен быть: system, brand, mtproto или disabled"
        )
    
    # Если выбран MTProto, проверяем что аккаунт существует
    if data.tg_sender == "mtproto" and data.mtproto_account_id:
        account = db.query(TelegramMtprotoAccount).filter(
            TelegramMtprotoAccount.id == data.mtproto_account_id,
            TelegramMtprotoAccount.tenant_id == current_user.tenant_id
        ).first()
        
        if not account:
            raise HTTPException(
                status_code=404,
                detail=f"MTProto аккаунт {data.mtproto_account_id} не найден или не активен"
            )
    
    # Получаем или создаем настройки
    settings = db.query(TenantSettings).filter(
        TenantSettings.tenant_id == current_user.tenant_id
    ).first()
    
    if not settings:
        settings = TenantSettings(
            tenant_id=current_user.tenant_id,
            tg_sender=data.tg_sender,
            mtproto_account_id=data.mtproto_account_id if data.tg_sender == "mtproto" else None
        )
        db.add(settings)
    else:
        settings.tg_sender = data.tg_sender
        settings.mtproto_account_id = data.mtproto_account_id if data.tg_sender == "mtproto" else None
    
    db.commit()
    db.refresh(settings)
    
    return {
        "tg_sender": settings.tg_sender,
        "mtproto_account_id": settings.mtproto_account_id,
        "message": "Настройки Telegram обновлены"
    }
