from fastapi import APIRouter, Depends, HTTPException
from pydantic import BaseModel
from sqlalchemy.orm import Session
from app.core.database import get_db
from app.core.models import TelegramLog, TelegramLogStatus
from app.services.telegram_service import send_telegram_message
from app.api.auth import get_current_user

router = APIRouter(prefix="/api/telegram", tags=["telegram"])


class TelegramSendRequest(BaseModel):
    chat_id: str
    message: str


@router.post("/send")
async def send_message(
    req: TelegramSendRequest,
    db: Session = Depends(get_db),
    current_user = Depends(get_current_user),
):
    """Send a Telegram message."""
    result = await send_telegram_message(req.chat_id, req.message)
    log = TelegramLog(
        chat_id=req.chat_id,
        message=req.message,
        status=TelegramLogStatus.sent if result["success"] else TelegramLogStatus.failed,
        error_message=result.get("error"),
    )
    db.add(log)
    db.commit()
    if not result["success"]:
        raise HTTPException(status_code=500, detail=result["error"])
    return {"success": True}


@router.post("/test")
async def test_telegram(
    db: Session = Depends(get_db),
    current_user = Depends(get_current_user),
):
    """Send test message to configured chat_id."""
    from app.core.config import get_telegram_config
    config = get_telegram_config()
    chat_id = config["chat_id"]
    test_msg = "🤖 ERP System Test Message\n━━━━━━━━━━━━━━━\n✅ Telegram Bot is working!"
    result = await send_telegram_message(chat_id, test_msg)
    log = TelegramLog(
        chat_id=chat_id,
        message=test_msg,
        status=TelegramLogStatus.sent if result["success"] else TelegramLogStatus.failed,
        error_message=result.get("error"),
    )
    db.add(log)
    db.commit()
    if not result["success"]:
        raise HTTPException(status_code=500, detail=result["error"])
    return {"success": True, "message": "Test sent"}


@router.get("/logs")
async def get_logs(
    page: int = 1,
    page_size: int = 50,
    db: Session = Depends(get_db),
    current_user = Depends(get_current_user),
):
    """Get Telegram sending logs."""
    query = db.query(TelegramLog).order_by(TelegramLog.sent_at.desc())
    total = query.count()
    items = query.offset((page-1)*page_size).limit(page_size).all()
    return {"items": items, "total": total, "page": page, "page_size": page_size}