"""Configuración de producción."""

from .base import *
from .base import MIDDLEWARE, REDIS_URL, env

DEBUG = False

ALLOWED_HOSTS = env.list('ALLOWED_HOSTS')

# Producción exige PostgreSQL declarado: no acepta el respaldo en SQLite.
DATABASES = {'default': env.db('DATABASE_URL')}

# --- Archivos estáticos ----------------------------------------------------
#
# Los sirve el propio proceso con WhiteNoise. Es lo que evita tener que poner un
# servidor web delante sólo para entregar el bundle de Vite: son unos pocos
# archivos con huella en el nombre, que se pueden cachear para siempre.
#
# El middleware va inmediatamente después del de seguridad, que es donde su
# documentación lo pide: antes de todo lo que arma una respuesta, porque un
# archivo estático no necesita sesión, ni usuario, ni props compartidas.
MIDDLEWARE = [
    MIDDLEWARE[0],
    'whitenoise.middleware.WhiteNoiseMiddleware',
    *MIDDLEWARE[1:],
]

STORAGES = {
    'default': {'BACKEND': 'django.core.files.storage.FileSystemStorage'},
    'staticfiles': {'BACKEND': 'whitenoise.storage.CompressedManifestStaticFilesStorage'},
}

# --- Caché -----------------------------------------------------------------
#
# Redis y no la memoria del proceso. Acá vive el control de idempotencia, y con
# varios procesos web una caché por proceso haría que el reintento de un
# despliegue caiga en uno que no vio el pedido original y se ejecute dos veces.
#
# Se declara con el backend que trae Django en vez de leer `CACHE_URL` con
# `env.cache()`: ese atajo traduce `redis://` a un paquete externo que no está
# instalado, y el error aparecería recién en la primera petición.
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.redis.RedisCache',
        'LOCATION': env('CACHE_URL', default=REDIS_URL),
    }
}

# --- Endurecimiento --------------------------------------------------------

SECURE_SSL_REDIRECT = env.bool('SECURE_SSL_REDIRECT', default=True)

# Las cookies viajan sólo por HTTPS, que es lo correcto en cualquier despliegue
# real. Se pueden bajar por configuración —y el valor por omisión sigue siendo
# el seguro— porque una prueba local en Docker se sirve por HTTP plano, y con
# esto en duro no se puede ni iniciar sesión para comprobar que la imagen anda.
SESSION_COOKIE_SECURE = env.bool('SESSION_COOKIE_SECURE', default=True)
CSRF_COOKIE_SECURE = env.bool('CSRF_COOKIE_SECURE', default=True)
SECURE_HSTS_SECONDS = env.int('SECURE_HSTS_SECONDS', default=31536000)
SECURE_HSTS_INCLUDE_SUBDOMAINS = True
SECURE_HSTS_PRELOAD = True
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
X_FRAME_OPTIONS = 'DENY'
SECURE_CONTENT_TYPE_NOSNIFF = True
SECURE_REFERRER_POLICY = 'same-origin'
