"""Application configuration.

For production, set SECRET_KEY and ALLOWED_HOSTS in the environment.
"""
from __future__ import annotations

import os
import secrets
from dataclasses import dataclass
from pathlib import Path

try:
    from dotenv import load_dotenv
except ImportError:  # pragma: no cover - optional dependency fallback
    load_dotenv = None

BASE_DIR = Path(__file__).resolve().parent.parent
if load_dotenv:
    load_dotenv(BASE_DIR / ".env")

STORAGE_DIR = BASE_DIR / "storage"


def _bool_env(name: str, default: bool = False) -> bool:
    value = os.getenv(name)
    if value is None:
        return default
    return value.strip().lower() in {"1", "true", "yes", "on"}


@dataclass(frozen=True)
class Settings:
    app_name: str = os.getenv("APP_NAME", "BCS ICT Fest 2026")
    environment: str = os.getenv("ENVIRONMENT", "development")
    host: str = os.getenv("HOST", "127.0.0.1")
    port: int = int(os.getenv("PORT", "8080"))
    secret_key: str = os.getenv("SECRET_KEY", secrets.token_urlsafe(48))
    allowed_hosts: tuple[str, ...] = tuple(
        host.strip()
        for host in os.getenv("ALLOWED_HOSTS", "localhost,127.0.0.1,0.0.0.0,testserver").split(",")
        if host.strip()
    )
    secure_cookies: bool = _bool_env("SECURE_COOKIES", False)
    enforce_https: bool = _bool_env("ENFORCE_HTTPS", False)
    save_registrations: bool = _bool_env("SAVE_REGISTRATIONS", False)
    registration_file: Path = STORAGE_DIR / "registrations.jsonl"
    csrf_max_age_seconds: int = int(os.getenv("CSRF_MAX_AGE_SECONDS", "3600"))
    rate_limit_per_minute: int = int(os.getenv("RATE_LIMIT_PER_MINUTE", "120"))


settings = Settings()
STORAGE_DIR.mkdir(parents=True, exist_ok=True)
