"""Настройки Synapse. Всё из окружения (.env), никаких секретов в коде."""

from functools import lru_cache
from pathlib import Path

from pydantic_settings import BaseSettings, SettingsConfigDict

BASE_DIR = Path(__file__).resolve().parent.parent


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

    app_name: str = "Gnexus Synapse"

    database_url: str = "postgresql+psycopg://synapse:synapse@localhost:5432/synapse"
    redis_url: str = "redis://localhost:6379/0"

    # gnexus-auth (SSO). Пока клиент не зарегистрирован на сервере auth,
    # здесь заглушки (не пустые — валидатор GAuthConfig требует непустые).
    gauth_base_url: str = "https://192.168.1.167"
    gauth_client_id: str = "set-me"
    gauth_client_secret: str = "set-me"
    gauth_redirect_uri: str = "https://synapse.localhost/oauth/callback"

    # SPA лежит в образе рядом с приложением; в dev используется vite-сервер.
    spa_dist_dir: Path = BASE_DIR / "spa_static"

    # CORS для dev-режима (vite :5173); в проде SPA раздаётся с того же origin.
    cors_origins: list[str] = ["http://localhost:5173"]

    def gauth_configured(self) -> bool:
        return self.gauth_client_id != "set-me" and self.gauth_client_secret != "set-me"


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