from functools import lru_cache

from pydantic import Field
from pydantic_settings import BaseSettings, SettingsConfigDict


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

    app_name: str = "CALCOEE"
    app_env: str = "development"
    mistral_api_key: str | None = Field(default=None, validation_alias="MISTRAL_API_KEY")
    mistral_model: str = Field(default="mistral-small-latest", validation_alias="MISTRAL_MODEL")
    mistral_transcription_model: str = Field(
        default="voxtral-mini-latest",
        validation_alias="MISTRAL_TRANSCRIPTION_MODEL",
    )
    enable_local_fallback: bool = Field(default=True, validation_alias="ENABLE_LOCAL_FALLBACK")


@lru_cache
def get_settings() -> Settings:
    return Settings()
