"""Application configuration loaded from environment."""

from __future__ import annotations

from functools import lru_cache

from pydantic import Field
from pydantic_settings import BaseSettings, SettingsConfigDict


class Settings(BaseSettings):
    """PatentYazar AI pipeline settings.

    API keys ve sırlar .env'den gelir; .env asla commit edilmez.
    """

    anthropic_api_key: str | None = Field(default=None)
    anthropic_default_model: str = Field(default="claude-haiku-4-5")

    # Espacenet OPS (EPO) — 500 sorgu/hafta ücretsiz
    # https://developers.epo.org/user/register ile alınır
    epo_ops_key: str | None = Field(default=None)
    epo_ops_secret: str | None = Field(default=None)

    # Sentry — üretim izleme, dev'de boş bırakılabilir (no-op)
    sentry_dsn: str | None = Field(default=None)
    sentry_environment: str = Field(default="local")
    sentry_traces_sample_rate: float = Field(default=0.1)

    # Sprint 2b: LLM echo için Haiku yeterli. Sprint 3+'ta:
    # - tarifname drafting için claude-opus-4-7
    # - istem paraphrasing için claude-sonnet-4-6
    # - format kontrol / pre-scan için claude-haiku-4-5

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


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