"""Gunicorn-Konfiguration fuer die EEG-Abrechnung (v1.05).

Aufruf via systemd:
    gunicorn --config gunicorn_config.py app:app

Hinweise:
- Die App streamt SSE (/api/v1/preview-stream, /api/v1/process). Dafuer MUSS
  ein Worker-Typ mit unbegrenzter Verbindungsdauer verwendet werden.
  Sync-Worker mit timeout=0 ist der einfachste Weg und funktioniert
  zuverlaessig, solange wir nicht hunderte parallele Verarbeitungen
  erwarten (wir sind single-tenant pro Installation).
- Langzeit-Uploads und PDF-Rendering brauchen grosszuegige Timeouts.
- Hinter Apache als Reverse-Proxy: 'forwarded-allow-ips=127.0.0.1'.
"""

import multiprocessing
import os

# Bindung: lokal, Apache reverse-proxyt drauf
bind = os.environ.get("EEG_GUNICORN_BIND", "127.0.0.1:8081")

# Worker
# WICHTIG: Sessions leben im Prozess-Speicher (session_manager._sessions).
# Mit mehreren Workern landet jede Anfrage zufällig bei einem Worker –
# der die Session des anderen nicht kennt → 404/400-Fehler.
# Daher zwingend workers=1. Die CPU-intensive Arbeit läuft in Threads (threads=4).
workers = int(os.environ.get("EEG_GUNICORN_WORKERS", 1))
worker_class = "sync"
threads = 4

# SSE braucht sehr langes Timeout
timeout = 0
graceful_timeout = 30
keepalive = 5

# Uploads
limit_request_line = 8190
limit_request_fields = 100
limit_request_field_size = 0   # unlimitiert fuer grosse Cookies / Tokens

# Logging
accesslog = "-"   # stdout -> systemd journal
errorlog  = "-"
loglevel  = os.environ.get("EEG_GUNICORN_LOGLEVEL", "info")
access_log_format = '%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s" %(L)ss'

# Proxy-Header von Apache akzeptieren
forwarded_allow_ips = "127.0.0.1"
proxy_allow_ips     = "127.0.0.1"

# Prozess-Benennung im ps-Output
proc_name = "eeg-abrechnung"

# Preload off, damit jeder Worker licensing.ensure_ready() neu prueft
preload_app = False
