from hermes_speech_cleaner import limpiar_para_voz
from typing import Optional
from fastapi import APIRouter, HTTPException, Depends
from pydantic import BaseModel, Field
from uuid import UUID
from starlette.concurrency import run_in_threadpool

from hermes_v4_adapter import preguntar_hermes_panel

def obtener_usuario_hermes():
    raise HTTPException(
        status_code=500,
        detail="Autenticación Hermes no configurada"
    )

router = APIRouter(prefix="/api/hermes", tags=["Hermes AI"])

class HermesPregunta(BaseModel):
    mensaje: str = Field(min_length=1, max_length=2000)
    sesion: Optional[str] = None

@router.post("/chat")
async def hermes_chat(datos: HermesPregunta, usuario: str = Depends(obtener_usuario_hermes)):
    if not datos.sesion:
        raise HTTPException(
            status_code=400,
            detail="Identificador de sesión requerido"
        )

    try:
        sesion = str(UUID(datos.sesion))
    except ValueError:
        raise HTTPException(
            status_code=400,
            detail="Identificador de sesión inválido"
        )

    if not usuario:
        raise HTTPException(
            status_code=401,
            detail="Usuario no identificado"
        )
    try:
        respuesta = await run_in_threadpool(
            preguntar_hermes_panel,
            datos.mensaje,
            usuario,
            sesion
        )
        return {"respuesta": respuesta}
    except Exception:
        raise HTTPException(
            status_code=502,
            detail="No fue posible consultar Gemini."
        )


# HERMES NEXUS - VOZ AZURE
from hermes_azure import generar_voz_hermes

@router.post("/voice")
async def hermes_voice(datos: HermesPregunta):
    try:
        resultado = await run_in_threadpool(
            generar_voz_hermes,
            limpiar_para_voz(datos.mensaje)
        )
        return resultado

    except ValueError:
        raise HTTPException(
            status_code=400,
            detail="Texto inválido"
        )

    except Exception:
        raise HTTPException(
            status_code=502,
            detail="No fue posible generar la voz de Hermes"
        )
