"""Configuration, lue uniquement dans les variables d'environnement.

En production (cPanel), les variables se définissent dans « Setup Python App ».
En local, un fichier .env (voir .env.example) est chargé s'il existe ; il ne
remplace jamais une variable déjà définie.
"""
import os

from dotenv import load_dotenv

BASE_DIR = os.path.abspath(os.path.dirname(__file__))
load_dotenv(os.path.join(BASE_DIR, '.env'))


def _env_bool(name, default):
    value = (os.environ.get(name) or '').strip().lower()
    if not value:
        return default
    return value in ('1', 'true', 'yes', 'on', 'oui')


class Config:
    SECRET_KEY = os.environ.get('SECRET_KEY')  # obligatoire : vérifié dans create_app()
    SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL')  # obligatoire aussi
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    # Le MySQL mutualisé ferme les connexions inactives : on les teste et on les recycle.
    SQLALCHEMY_ENGINE_OPTIONS = {'pool_pre_ping': True, 'pool_recycle': 280}

    # Documents téléversés : hors public_html, ils ne sont servis que par une route authentifiée.
    DATA_DIR = os.environ.get('DATA_DIR') or os.path.join(BASE_DIR, 'data')
    SITE_NAME = os.environ.get('SITE_NAME') or 'GoScubaTours Formation'
    ALLOW_REGISTRATION = _env_bool('ALLOW_REGISTRATION', True)

    MAX_CONTENT_LENGTH = 16 * 1024 * 1024
    # Une signature (PNG en base64) peut approcher 400 Ko : Werkzeug 3.1.0 à 3.1.8 la refusait
    # avec la limite par défaut de 500 000 octets une fois encodée dans le formulaire.
    MAX_FORM_MEMORY_SIZE = 2 * 1024 * 1024

    SESSION_COOKIE_SECURE = True
    SESSION_COOKIE_HTTPONLY = True
    SESSION_COOKIE_SAMESITE = 'Lax'
    REMEMBER_COOKIE_SECURE = True
    REMEMBER_COOKIE_HTTPONLY = True
    REMEMBER_COOKIE_SAMESITE = 'Lax'
    PREFERRED_URL_SCHEME = 'https'
