import os
from django.core.wsgi import get_wsgi_application

# Django Settings Modul setzen - wird nur verwendet wenn nicht bereits gesetzt
# (z.B. durch eine Umgebungsvariable des Betriebssystems)
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'verbrauchsportal.settings')

# Django WSGI Applikation wird hier als None initialisiert.
# Sie wird beim ersten Request einmalig erstellt und danach wiederverwendet.
# Dadurch wird vermieden, dass Django bei jedem Request neu initialisiert wird (Performance).
_application = None


def application(environ, start_response):
    """
    WSGI Einstiegspunkt für Apache mod_wsgi.

    Problem: Apache's SetEnv setzt Variablen nur im Request-Kontext (environ),
    python-decouple liest jedoch aus dem Python-Prozess-Kontext (os.environ).
    Diese Funktion überbrückt diese Lücke beim ersten Request.

    Args:
        environ:        Dictionary mit HTTP-Request-Infos und Apache-Umgebungsvariablen
        start_response: Callback-Funktion zum Senden von HTTP-Status und Headers
    """
    global _application

    # ENV_FILE enthält den Pfad zur .env Datei (gesetzt via Apache's SetEnv).
    # Nur wenn die Variable gesetzt ist, wird sie in den Python-Prozess-Kontext übertragen.
    # Auf der Testumgebung wird SetEnv nicht verwendet – dort liegt die .env
    # im Projektverzeichnis und wird von python-decouple automatisch gefunden.
    if environ.get('ENV_FILE'):
        os.environ['ENV_FILE'] = environ.get('ENV_FILE')

    # Django beim ersten Request initialisieren.
    # _application bleibt danach im Speicher und wird wiederverwendet.
    if _application is None:
        _application = get_wsgi_application()

    return _application(environ, start_response)