"""Normalise le chemin public envoyé par le reverse proxy (Apache, Nginx…)."""


class ForwardedPrefixMiddleware:
    """
    Lit X-Forwarded-Prefix (ou X-Script-Name) et :
    - définit SCRIPT_NAME pour que url_for génère les bons liens (/papa/…)
    - retire le préfixe de PATH_INFO si Apache ne l'a pas fait
    """

    def __init__(self, app):
        self.app = app

    def __call__(self, environ, start_response):
        prefix = (
            environ.get("HTTP_X_FORWARDED_PREFIX")
            or environ.get("HTTP_X_SCRIPT_NAME")
            or ""
        ).rstrip("/")

        if prefix:
            environ["SCRIPT_NAME"] = prefix
            path = environ.get("PATH_INFO") or "/"
            if path == prefix or path.startswith(prefix + "/"):
                path = path[len(prefix) :] or "/"
                environ["PATH_INFO"] = path

        if environ.get("HTTP_X_FORWARDED_PROTO") == "https":
            environ["wsgi.url_scheme"] = "https"

        return self.app(environ, start_response)
