"""User-module settings. Imported after the base configuration."""
import os
from datetime import timedelta


def configure(base):
    base["INSTALLED_APPS"] += ["rest_framework_simplejwt.token_blacklist"]
    base["DEBUG"] = os.environ.get("DJANGO_DEBUG", "true").lower() == "true"
    secret = os.environ.get("DJANGO_SECRET_KEY")
    if secret:
        base["SECRET_KEY"] = secret
    elif not base["DEBUG"]:
        from django.core.exceptions import ImproperlyConfigured
        raise ImproperlyConfigured("Set DJANGO_SECRET_KEY when DJANGO_DEBUG=false.")
    base["ALLOWED_HOSTS"] = [value.strip() for value in os.environ.get(
        "DJANGO_ALLOWED_HOSTS", "localhost,127.0.0.1,[::1]").split(",") if value.strip()]
    base["REST_FRAMEWORK"] = {
        "EXCEPTION_HANDLER": "api_core.exception_handler.exception_handler",
        "DEFAULT_AUTHENTICATION_CLASSES": ["users.authentication.AccountJWTAuthentication"],
        "DEFAULT_PERMISSION_CLASSES": ["rest_framework.permissions.IsAuthenticated"],
        "DEFAULT_SCHEMA_CLASS": "drf_spectacular.openapi.AutoSchema",
        "DEFAULT_THROTTLE_CLASSES": ["rest_framework.throttling.UserRateThrottle"],
        "DEFAULT_THROTTLE_RATES": {
            "user": "120/min", "account_public": "20/hour", "account_login": "30/hour",
            "account_email": "5/hour", "account_refresh": "60/hour", "account_security": "20/hour",
        },
        "NUM_PROXIES": 0,
    }
    base["SIMPLE_JWT"] = {
        "ACCESS_TOKEN_LIFETIME": timedelta(minutes=5),
        "REFRESH_TOKEN_LIFETIME": timedelta(days=7),
        "ROTATE_REFRESH_TOKENS": True,
        "BLACKLIST_AFTER_ROTATION": True,
        "UPDATE_LAST_LOGIN": True,
        "CHECK_REVOKE_TOKEN": True,
        "AUTH_HEADER_TYPES": ("Bearer",),
    }
    base["SPECTACULAR_SETTINGS"] = {"TITLE": "FTG Unified API", "VERSION": "2.0.0", "SERVE_INCLUDE_SCHEMA": False}
    base["PASSWORD_RESET_TIMEOUT"] = 3600
    for validator in base["AUTH_PASSWORD_VALIDATORS"]:
        if validator["NAME"].endswith("MinimumLengthValidator"):
            validator["OPTIONS"] = {"min_length": 10}
    if os.environ.get("DJANGO_DB_PATH"):
        base["DATABASES"]["default"]["NAME"] = os.environ["DJANGO_DB_PATH"]
    base["ACCOUNT_FRONTEND_URL"] = os.environ.get("ACCOUNT_FRONTEND_URL", "http://127.0.0.1:5173/account")
    email_backend = os.environ.get(
        "EMAIL_BACKEND",
        "django.core.mail.backends.console.EmailBackend",
    )

    mailer = {"BACKEND": email_backend}
    if email_backend == "django.core.mail.backends.smtp.EmailBackend":
        mailer["OPTIONS"] = {
            "host": os.environ.get("EMAIL_HOST", "localhost"),
            "port": int(os.environ.get("EMAIL_PORT", "587")),
            "username": os.environ.get("EMAIL_HOST_USER", ""),
            "password": os.environ.get("EMAIL_HOST_PASSWORD", ""),
            "use_tls": os.environ.get("EMAIL_USE_TLS", "true").lower() == "true",
            "timeout": 15,
        }
    base["MAILERS"] = {"default": mailer}

    base["DEFAULT_FROM_EMAIL"] = os.environ.get(
        "DEFAULT_FROM_EMAIL",
        "FTG <noreply@localhost>",
    )
    base["DEFAULT_AUTO_FIELD"] = "django.db.models.BigAutoField"
    base["LIVE_MATCH_SSE_POLL_SECONDS"] = float(os.environ.get("LIVE_MATCH_SSE_POLL_SECONDS", "1.0"))
    base["LIVE_MATCH_SSE_HEARTBEAT_SECONDS"] = float(os.environ.get("LIVE_MATCH_SSE_HEARTBEAT_SECONDS", "10.0"))
    base["LIVE_MATCH_SSE_MAX_CONNECTION_SECONDS"] = float(os.environ.get("LIVE_MATCH_SSE_MAX_CONNECTION_SECONDS", "55.0"))
    cache_url = os.environ.get("ACCOUNT_REDIS_URL")
    if cache_url:
        base["CACHES"] = {"default": {"BACKEND": "django.core.cache.backends.redis.RedisCache", "LOCATION": cache_url}}
    base["SESSION_COOKIE_SECURE"] = not base["DEBUG"]
    base["CSRF_COOKIE_SECURE"] = not base["DEBUG"]
    base["SECURE_SSL_REDIRECT"] = not base["DEBUG"]
