"""
SCC (Standardvertragsklauseln / Standard Contractual Clauses) checks.

EU Commission Decision 2021/914 — the "new" SCCs.

Level 1: Pflichtbestandteil vorhanden?
Level 2: Bestandteil korrekt ausgefuellt?
"""

SCC_CHECKLIST = [
    # ── L1: Modul-Wahl ──────────────────────────────────────────────
    {
        "id": "scc_module",
        "label": "SCC-Modul gewaehlt (C2C, C2P, P2C, P2P)",
        "level": 1, "parent": None,
        "patterns": [
            r"modul\s*(?:1|2|3|4|eins|zwei|drei|vier|i{1,3}v?)\s*[-–:.]",
            r"(?:module\s+(?:one|two|three|four|[1-4]))",
            r"(?:controller|processor)\s+to\s+(?:controller|processor)",
            r"verantwortliche[rn]?\s+(?:an|zu)\s+(?:auftragsverarbeiter|verantwortliche)",
        ],
        "severity": "CRITICAL",
        "hint": "Die EU SCC 2021 bestehen aus 4 Modulen. Das richtige Modul MUSS gewaehlt werden: Modul 1 (C2C), Modul 2 (C2P — haeufigster Fall), Modul 3 (P2P), Modul 4 (P2C). Falsches Modul = unwirksame SCC.",
    },

    # ── L1: Annex I — Vertragsparteien + Transfer ───────────────────
    {
        "id": "scc_annex_i",
        "label": "Annex I: Vertragsparteien und Uebermittlung beschrieben",
        "level": 1, "parent": None,
        "patterns": [
            r"(?:anhang|anlage|annex)\s*i\b",
            r"(?:list\s+of\s+parties|verzeichnis\s+der\s+(?:vertrags)?parteien)",
            r"(?:daten(?:ex|im)porteur|data\s+(?:ex|im)porter)",
        ],
        "severity": "HIGH",
        "hint": "Annex I der SCC muss benennen: Datenexporteur (Name, Adresse, Kontakt, Rolle), Datenimporteur (Name, Adresse, Kontakt, Rolle), Beschreibung der Uebermittlung (Kategorien, Empfaenger, Zweck, Dauer).",
    },
    {
        "id": "scc_annex_i_parties",
        "label": "Vertragsparteien identifiziert (Exporteur + Importeur)",
        "level": 2, "parent": "scc_annex_i",
        "patterns": [
            r"(?:daten)?exporteur|data\s+exporter",
            r"(?:daten)?importeur|data\s+importer",
        ],
        "severity": "MEDIUM",
        "hint": "Beide Parteien muessen vollstaendig identifiziert sein: Name, Adresse, Ansprechpartner, Rolle (Controller/Processor).",
    },

    # ── L1: Annex II — TOM ──────────────────────────────────────────
    {
        "id": "scc_annex_ii",
        "label": "Annex II: Technische und organisatorische Massnahmen",
        "level": 1, "parent": None,
        "patterns": [
            r"(?:anhang|anlage|annex)\s*ii\b",
            r"technische[\s\S]{0,30}organisatorische[\s\S]{0,30}ma(?:ss|ß)nahmen[\s\S]{0,50}(?:anhang|anlage|annex)",
        ],
        "severity": "HIGH",
        "hint": "Annex II muss konkrete TOM beschreiben (nicht nur auf den Hauptvertrag verweisen). Die Massnahmen muessen dem Risiko der Uebermittlung angemessen sein.",
    },

    # ── L1: Annex III — Sub-Processors ───────────────────────────────
    {
        "id": "scc_annex_iii",
        "label": "Annex III: Liste der Unterauftragsverarbeiter (bei Modul 2/3)",
        "level": 1, "parent": None,
        "patterns": [
            r"(?:anhang|anlage|annex)\s*iii\b",
            r"(?:liste|verzeichnis)\s+(?:der\s+)?(?:unter|sub)[\s-]?auftrags?",
        ],
        "severity": "MEDIUM",
        "hint": "Bei Modul 2 (C2P) und Modul 3 (P2P): Annex III muss alle Sub-Processors auflisten mit Name, Adresse, Taetigkeit. Bei Modul 1 (C2C) und 4 (P2C) nicht erforderlich.",
    },

    # ── L1: Transfer Impact Assessment (TIA) ────────────────────────
    {
        "id": "scc_tia",
        "label": "Transfer Impact Assessment (TIA) durchgefuehrt/referenziert",
        "level": 1, "parent": None,
        "patterns": [
            r"transfer\s+impact\s+assessment",
            r"(?:uebermittlungs|transfer)[\s-]?(?:risiko|folgen)[\s-]?(?:bewertung|abschaetzung|analyse)",
            r"(?:risikobewertung|risikoanalyse)[\s\S]{0,100}(?:drittland|uebermittlung|transfer)",
            r"klausel\s*14\b|clause\s*14\b",
        ],
        "severity": "HIGH",
        "hint": "Klausel 14 der SCC verlangt ein Transfer Impact Assessment (TIA): Analyse der Rechtslage im Zielland, insbesondere Zugriffsbefugnisse der Behoerden. Ohne TIA sind die SCC unvollstaendig (EuGH Schrems II, C-311/18).",
    },

    # ── L1: Keine unzulaessigen Aenderungen ─────────────────────────
    {
        "id": "scc_no_modification",
        "label": "Kernklauseln unmodifiziert (keine unzulaessigen Aenderungen)",
        "level": 1, "parent": None,
        "patterns": [
            r"(?:standardvertragsklauseln|standard\s+contractual\s+clauses)[\s\S]{0,200}(?:unver(?:ae|ä)ndert|nicht\s+ge(?:ae|ä)ndert|2021/914|durchfuehrungsbeschluss)",
            r"(?:durchf(?:ue|ü)hrungsbeschluss|implementing\s+decision)\s+(?:\(EU\)\s+)?2021/914",
        ],
        "severity": "MEDIUM",
        "hint": "Die Kernklauseln der SCC (Klauseln 1-18) duerfen nicht geaendert werden. Ergaenzende Klauseln sind erlaubt, solange sie nicht im Widerspruch stehen. Geaenderte SCC sind unwirksam.",
    },
]
