"""Pydantic Settings — TÜM config buradan okunur. os.environ direkt kullanım YASAK."""
from functools import lru_cache

from pydantic_settings import BaseSettings, SettingsConfigDict


class Settings(BaseSettings):
    # --- DB ---
    db_host: str = "localhost"
    db_port: int = 3306
    db_name: str = "tekyerden_flovy"
    db_user: str
    db_password: str

    # --- Redis ---
    redis_url: str = "redis://127.0.0.1:6379/1"

    # --- AI ---
    gemini_api_key: str = ""
    gemma_model: str = "gemini-flash-lite-latest"
    gemma_endpoint: str = "https://generativelanguage.googleapis.com/v1beta"

    # --- Streaming köprüsü ---
    stream_secret: str = ""
    stream_host: str = "127.0.0.1"
    stream_port: int = 8090
    flovy_streaming_enabled: bool = True

    # --- e-Fatura (Turkcell/iSIM360) ---
    turkcell_api_key: str = ""
    turkcell_api_url: str = ""

    # --- PayTR ---
    paytr_merchant_id: str = ""
    paytr_merchant_key: str = ""
    paytr_merchant_salt: str = ""

    # --- JWT ---
    jwt_secret: str = "change-me"
    jwt_ttl_days: int = 30
    jwt_algorithm: str = "HS256"

    # --- App ---
    app_env: str = "production"
    app_base_url: str = "https://flovy.tekyerden.co"

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

    @property
    def database_url(self) -> str:
        return (
            f"mysql+asyncmy://{self.db_user}:{self.db_password}"
            f"@{self.db_host}:{self.db_port}/{self.db_name}?charset=utf8mb4"
        )


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


settings = get_settings()
