"""Chatbot de ayuda y FAQ — usa OpenAI desde el backend."""
from fastapi import APIRouter, Depends, HTTPException
from pydantic import BaseModel, Field

from app.core.config import settings
from app.core.deps import get_current_user

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


SYSTEM_PROMPT = (
    "Eres Eco, el asistente oficial de la app Recolecta, dedicada a la recolección "
    "inteligente y privada de residuos sólidos urbanos. Tu objetivo es responder "
    "preguntas frecuentes de los ciudadanos sobre: horarios y rutas de los camiones, "
    "separación correcta de residuos (orgánico, inorgánico reciclable, sanitario, "
    "RAEE, manejo especial), qué hacer si el camión no pasó, cómo reportar un "
    "problema y cómo usar la app. "
    "Reglas: 1) responde siempre en español neutro y de manera breve (máximo 4 "
    "oraciones); 2) si te preguntan algo fuera de este dominio, redirige amablemente "
    "al tema; 3) nunca inventes horarios ni rutas específicas — si el usuario pide "
    "datos concretos de su colonia, indícale que los puede ver en la pantalla de mapa "
    "o ETA dentro de la app; 4) jamás compartas información personal de choferes."
)


class ChatMessage(BaseModel):
    role: str = Field(pattern=r"^(user|assistant)$")
    content: str = Field(min_length=1, max_length=2000)


class ChatHelpIn(BaseModel):
    messages: list[ChatMessage] = Field(min_length=1, max_length=20)


class ChatHelpOut(BaseModel):
    reply: str


@router.post("/help", response_model=ChatHelpOut)
def chat_help(
    body: ChatHelpIn,
    _user: dict = Depends(get_current_user),
):
    if not settings.OPENAI_API_KEY:
        raise HTTPException(
            status_code=503,
            detail="El asistente no está configurado (falta OPENAI_API_KEY).",
        )

    try:
        from openai import OpenAI
    except ImportError:
        raise HTTPException(
            status_code=500, detail="Librería openai no instalada en el servidor."
        )

    client = OpenAI(api_key=settings.OPENAI_API_KEY)
    payload = [{"role": "system", "content": SYSTEM_PROMPT}] + [
        m.model_dump() for m in body.messages
    ]

    try:
        completion = client.chat.completions.create(
            model=settings.OPENAI_MODEL,
            messages=payload,
            temperature=0.4,
            max_tokens=400,
        )
        reply = completion.choices[0].message.content or ""
    except Exception as e:
        raise HTTPException(status_code=502, detail=f"Error con OpenAI: {e}")

    return ChatHelpOut(reply=reply.strip())
