from fastapi import APIRouter, Depends, status
from fastapi.responses import JSONResponse
from pydantic import BaseModel
from typing import Optional
from src.api.dependencies import get_query_router, get_task_manager
from src.core.query_router import Mode, QueryRouter
from src.core.task_manager import TaskManager

router = APIRouter(prefix="/api/v1")


class ChatRequest(BaseModel):
    conversation_id: Optional[str] = None
    message: str
    context: dict = {}


class ChatResponse(BaseModel):
    message_id: str
    content: dict
    trace_id: str


class ChatAsyncResponse(BaseModel):
    task_id: str
    status: str
    estimated_seconds: int


@router.post("/chat")
async def chat(
    request: ChatRequest,
    query_router: QueryRouter = Depends(get_query_router),
    task_manager: TaskManager = Depends(get_task_manager),
):
    mode, score = query_router.assess_complexity(request.message, request.context)

    if mode == Mode.SYNC:
        return ChatResponse(
            message_id="msg_sync_123",
            content={"type": "text", "text": "这是一个同步响应"},
            trace_id="trace_123"
        )
    else:
        task = await task_manager.create_task(
            query=request.message,
            complexity_score=score,
            user_id=request.context.get("user_id"),
            conversation_id=request.conversation_id
        )
        async_response = ChatAsyncResponse(
            task_id=task.id,
            status=task.status,
            estimated_seconds=5
        )
        return JSONResponse(
            status_code=status.HTTP_202_ACCEPTED,
            content=async_response.model_dump()
        )
