import os from dataclasses import dataclass, field from functools import lru_cache def _csv_env(name: str, default: list[str]) -> list[str]: raw = os.getenv(name) if not raw: return default return [item.strip() for item in raw.split(",") if item.strip()] @dataclass(frozen=True) class Settings: app_name: str = os.getenv("APP_NAME", "Certificate Management System") app_env: str = os.getenv("APP_ENV", "development") database_url: str = os.getenv("DATABASE_URL", "sqlite:///./dev.db") secret_key: str = os.getenv("SECRET_KEY", "change-me") public_base_url: str = os.getenv("PUBLIC_BASE_URL", "http://localhost:8080") certificate_no_secret: str = os.getenv("CERTIFICATE_NO_SECRET", "change-me") pdf_cache_days: int = int(os.getenv("PDF_CACHE_DAYS", "30")) data_root: str = os.getenv("DATA_ROOT", "/data/certificate-system") cors_origins: list[str] = field( default_factory=lambda: _csv_env("CORS_ORIGINS", ["http://localhost:5173", "http://localhost:8080"]) ) @lru_cache def get_settings() -> Settings: return Settings() settings = get_settings()