"""Configuration applicative centralisée (principe 12-factor : config via env).

Équivalent Python du `application.properties` Spring Boot, avec validation
Pydantic : une variable manquante/invalide = crash au démarrage, pas une
NullPointerException surprise à la 3ème requête.
"""
from functools import lru_cache

from pydantic_settings import BaseSettings, SettingsConfigDict


class Settings(BaseSettings):
    """Settings chargés depuis .env ou variables d'environnement."""

    model_config = SettingsConfigDict(
        env_file=".env",
        env_file_encoding="utf-8",
        extra="ignore",
    )

    ollama_base_url: str = "http://localhost:11434"
    llm_model: str = "gemma4:e2b"
    llm_timeout_seconds: int = 120


@lru_cache
def get_settings() -> Settings:
    """Singleton via cache — FastAPI l'injecte avec Depends() dans les routes."""
    return Settings()
