"""`POST /v1/process` — appelé par `apps/api` (`IntentServiceClient.process`)
en remplacement direct de l'ancien `NlpManager.process(locale, text)`. Voir
`LocalePipeline.process` pour la sémantique exacte (locale non entraînée ou
`text` vide -> résultat vide, jamais une erreur).
"""

import logging

from fastapi import APIRouter, Depends

from ..pipeline_registry import registry
from ..schemas import EntityPayload, ProcessRequest, ProcessResponse
from ..security import require_valid_secret

logger = logging.getLogger(__name__)

router = APIRouter(dependencies=[Depends(require_valid_secret)])


@router.post("/v1/process", response_model=ProcessResponse)
def process(request: ProcessRequest) -> ProcessResponse:
    result = registry.process(request.locale, request.text)

    # Une ligne par appel — input (`locale`/`text`) et output (`entities`/
    # `intent`/`score`) réunis dans la même ligne JSON, pour pouvoir suivre
    # exactement ce que le pipeline a décidé pour un texte donné (voir
    # `logging_config.py` pour le format).
    logger.info(
        "tech-step NLP process",
        extra={
            "locale": request.locale,
            "text": request.text,
            "entities": [
                {"uid": entity.uid, "start": entity.start, "end": entity.end, "kind": entity.kind}
                for entity in result.entities
            ],
            "intent": result.intent,
            "score": result.score,
        },
    )

    return ProcessResponse(
        entities=[
            EntityPayload(uid=entity.uid, start=entity.start, end=entity.end, kind=entity.kind)
            for entity in result.entities
        ],
        intent=result.intent,
        score=result.score,
    )
