"""
Backend SMTP qui permet de désactiver la vérification SSL (pour hébergement cPanel
où le certificat vers smtp.gmail.com peut être modifié par le proxy).
Activable via .env (EMAIL_SSL_SKIP_VERIFY=1) ou depuis l'admin Django (Réglages > EMAIL_SSL_SKIP_VERIFY = 1).
"""
import ssl
from django.core.mail.backends.smtp import EmailBackend
from django.conf import settings


def _email_ssl_skip_verify():
    """True si on doit désactiver la vérification SSL (env ou réglage admin)."""
    if getattr(settings, "EMAIL_SSL_SKIP_VERIFY", False):
        return True
    try:
        from django.apps import apps
        if apps.is_installed("users"):
            AppSetting = apps.get_model("users", "AppSetting")
            val = AppSetting.objects.filter(key="EMAIL_SSL_SKIP_VERIFY").values_list("value", flat=True).first()
            return (val or "").strip().lower() in ("1", "true", "yes")
    except Exception:
        pass
    return False


class SMTPBackendSkipVerify(EmailBackend):
    """Comme le backend SMTP par défaut, mais avec option de ne pas vérifier le certificat SSL."""

    @property
    def ssl_context(self):
        if _email_ssl_skip_verify():
            ctx = ssl.create_default_context()
            ctx.check_hostname = False
            ctx.verify_mode = ssl.CERT_NONE
            return ctx
        return super().ssl_context
