import os

from django.core.exceptions import ImproperlyConfigured

from .base import *  # noqa: F401,F403
from .base import BASE_DIR, env

DEBUG = False

# Obligatoires en production : l'application refuse de démarrer si elles manquent.
# Lu sans django-environ : une clé commençant par « $ » serait prise pour une référence à une autre variable.
SECRET_KEY = os.environ.get("DJANGO_SECRET_KEY", "")
if len(SECRET_KEY) < 40 or SECRET_KEY.startswith(("change-me", "dev-insecure", "à-générer")):
    raise ImproperlyConfigured("DJANGO_SECRET_KEY doit être définie (clé aléatoire d'au moins 40 caractères).")
ALLOWED_HOSTS = env.list("DJANGO_ALLOWED_HOSTS")
CSRF_TRUSTED_ORIGINS = env.list("DJANGO_CSRF_TRUSTED_ORIGINS")

# Cache partagé entre les workers (paramètres du site, menu, flash info, limitation de débit).
# Par défaut : table MySQL (python manage.py createcachetable). Redis possible : CACHE_URL=redis://127.0.0.1:6379/1
CACHES = {"default": env.cache("CACHE_URL", default="dbcache://django_cache")}

# HTTPS (derrière Nginx)
SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")
SECURE_SSL_REDIRECT = env.bool("DJANGO_SSL_REDIRECT", default=True)
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_REFERRER_POLICY = "strict-origin-when-cross-origin"
SECURE_HSTS_SECONDS = env.int("DJANGO_HSTS_SECONDS", default=0)  # 31536000 une fois HTTPS validé
SECURE_HSTS_INCLUDE_SUBDOMAINS = False
X_FRAME_OPTIONS = "SAMEORIGIN"

# Connexions MySQL persistantes
DATABASES["default"]["CONN_MAX_AGE"] = env.int("DB_CONN_MAX_AGE", default=60)  # noqa: F405
DATABASES["default"]["CONN_HEALTH_CHECKS"] = True  # noqa: F405

# Erreurs 500 envoyées par email aux administrateurs techniques
ADMINS = [("Admin", a) for a in env.list("DJANGO_ADMINS", default=[])]
SERVER_EMAIL = env("SERVER_EMAIL", default="serveur@labelinfo.tv")

LOG_DIR = env("DJANGO_LOG_DIR", default=str(BASE_DIR / "logs"))
LOGGING = {
    "version": 1,
    "disable_existing_loggers": False,
    "formatters": {"std": {"format": "{asctime} {levelname} {name} : {message}", "style": "{"}},
    "handlers": {
        "console": {"class": "logging.StreamHandler", "formatter": "std"},
        "file": {
            "class": "logging.handlers.RotatingFileHandler",
            "filename": f"{LOG_DIR}/django.log",
            "maxBytes": 5 * 1024 * 1024,
            "backupCount": 5,
            "formatter": "std",
        },
        "mail_admins": {"class": "django.utils.log.AdminEmailHandler", "level": "ERROR"},
    },
    "root": {"handlers": ["console", "file"], "level": "WARNING"},
    "loggers": {"django.request": {"handlers": ["file", "mail_admins"], "level": "ERROR", "propagate": False}},
}
