from functools import lru_cache

from pydantic import Field
from pydantic_settings import BaseSettings, SettingsConfigDict


class Settings(BaseSettings):
    """Values from `.env` only."""

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

    api_prefix: str = Field(...)
    internal_api_token: str = Field(...)

    # LLM (SOW: OpenAI / Anthropic / Gemini)
    openai_api_key: str = Field(...)
    anthropic_api_key: str = Field(...)
    google_api_key: str = Field(...)
    default_llm_provider: str = Field(...)
    fallback_llm_provider: str = Field(...)
    openai_model: str = Field(...)
    anthropic_model: str = Field(...)
    google_model: str = Field(...)

    # Voice transcription (OpenAI Whisper)
    transcription_provider: str = Field(...)
    whisper_model: str = Field(...)


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