"""Phase 3: Normalisierung der 8 Audit-Klassifizierungs-Felder
(scan_context aus dem PreScanWizard) → business_scope-Tokens.

EINZIGER Normalisierungspunkt: beide Quellen (SDK-Profil/Scope ODER der
standalone Compliance-Check) füllen denselben business_scope, den
scope_matches() in den Agenten konsumiert. Schließt die Drift, dass die
8 Felder gespeichert, aber nicht an die Agenten gegeben wurden.

Rechts-Zuordnung mit dem User (Domain-Experte) bestätigt 2026-06-10:
- industry=healthcare → NICHT pauschal regulated_profession (Krankenhaus-
  GmbH ≠ Apotheke). regulated_profession kommt nur aus expliziter
  Erkennung (LLM-Profil is_regulated_profession), nicht aus der Branche.
- Handelsregister: gmbh/ug/ag/kg/ohg/gmbh_co_kg/ek (e.K. ist registerpflichtig).
- Vertretungsberechtigte: + verein/stiftung, aber OHNE ek (Inhaber genügt).
- USt-IdNr: kein Rechtsform-Gate (Kleinunternehmer §19 haben keine).
"""

from __future__ import annotations

# Rechtsformen OHNE Handelsregister-Eintrag → Handelsregister-MC n/a.
# (HR-pflichtig sind gmbh/ug/ag/kg/ohg/gmbh_co_kg/ek — die schließen wir
#  NICHT aus. Opt-out, damit Entry-Points ohne legal_form anwendbar bleiben.)
_NON_HANDELSREGISTER_FORMS = frozenset({"verein", "stiftung", "behoerde", "other"})
# Rechtsformen OHNE gesondertes Vertretungsorgan (e.K. = Inhaber selbst).
_NON_VERTRETUNG_FORMS = frozenset({"ek", "behoerde", "other"})


def scan_context_to_scope(scan_context: dict | None) -> list[str]:
    """8 Wizard-Felder → business_scope-Tokens (für scope_matches)."""
    sc = scan_context or {}
    industry = str(sc.get("industry") or "").lower()
    business_model = str(sc.get("business_model") or "").lower()
    direct_sales = str(sc.get("direct_sales") or "").lower()
    legal_form = str(sc.get("legal_form") or "").lower()

    scope: set[str] = set()
    # ── Branche / Geschäftsmodell ──
    if industry == "ecommerce" or direct_sales == "yes":
        scope.add("ecommerce")
    if business_model in ("b2c", "both"):
        scope.add("b2c")
    if industry == "insurance":
        scope.add("insurance")
    if industry == "banking":
        scope.add("financial_services")
    if industry == "automotive":
        scope.add("automotive")
    if industry == "media":
        scope.add("editorial")              # §18 MStV (pragmatisch)
    if legal_form == "behoerde" or industry == "public":
        scope.add("public_authority")
    # industry=healthcare → bewusst KEIN regulated_profession.

    # ── Rechtsform-Gates (opt-out) ──
    # Nur explizit AUSSCHLIESSEN; ohne/unbekanntes legal_form bleibt die
    # Angabe anwendbar (z.B. Agent-Test ohne Wizard verschluckt nichts).
    if legal_form in _NON_HANDELSREGISTER_FORMS:
        scope.add("kein_handelsregister")
    if legal_form in _NON_VERTRETUNG_FORMS:
        scope.add("keine_vertretung")

    # ── 4-Status: Rechtsform ueberhaupt bekannt? ──
    # Hat der Wizard eine Rechtsform geliefert, ist die Register-/Vertretungs-
    # pflicht belastbar entscheidbar (FAIL bei Fehlen). Fehlt sie hier UND im
    # Text → INSUFFICIENT_EVIDENCE (Entscheidung trifft der Agent).
    if legal_form:
        scope.add("legal_form_known")

    return sorted(scope)
