"""Point d'entrée FastAPI — `uv run uvicorn intent_service.main:app` (voir
le Dockerfile et le README de ce service).

Le chargement des modèles spaCy de base *et* l'entraînement de chaque
locale (`PipelineRegistry.initialize`) se font dans le handler `lifespan`
ci-dessous, *avant* qu'uvicorn n'accepte de requêtes — `GET /health` ne
répond donc `200` qu'une fois ce coût payé (chargement + entraînement),
jamais pendant qu'il est encore en cours (uvicorn ne sert aucune requête
tant que le `lifespan` de démarrage n'est pas terminé). Ce service est
autonome : `training_data.TECH_STEP_TRAINING_DATA` vit dans ce module,
`apps/api` ne pousse plus rien via HTTP (voir `pipeline_registry.py` pour
le détail de ce que ça change par rapport à la version précédente).
"""

from contextlib import asynccontextmanager

from fastapi import FastAPI

from .config import settings
from .logging_config import configure_logging
from .pipeline_registry import registry
from .routes import health, process

# Avant tout le reste : `routes/process.py` journalise dès la première
# requête, `initialize()` ci-dessous journalise aussi (voir
# `pipeline_registry.py`) — le formateur JSON doit déjà être en place.
configure_logging(settings.log_level)


@asynccontextmanager
async def lifespan(app: FastAPI):
    registry.initialize()
    yield


app = FastAPI(title="tech-step-intent-service", lifespan=lifespan)

app.include_router(health.router)
app.include_router(process.router)
