"""
Widerrufsbelehrung checks — §355 BGB, §312g BGB.

Level 1: Pflichtangabe erwaehnt?
Level 2: Pflichtangabe korrekt/vollstaendig?
"""

WIDERRUF_CHECKLIST = [
    # ── L1: Belehrung ueber Widerrufsrecht ────────────────────────────
    {
        "id": "right_info",
        "label": "Belehrung ueber Widerrufsrecht",
        "level": 1, "parent": None,
        "patterns": [
            r"widerrufsrecht",
            r"right\s+of\s+withdrawal",
            r"recht\s+(?:zum|auf)\s+widerruf",
        ],
        "severity": "HIGH",
        "hint": "Gemaess Art. 246a §1 Abs. 2 Nr. 1 EGBGB muss ueber das Bestehen des Widerrufsrechts informiert werden. Verwenden Sie die gesetzliche Musterbelehrung (Anlage 1 zu Art. 246a EGBGB) — eigene Formulierungen sind fehleranfaellig und abmahngefaehrdet.",
    },

    # ── L1: Widerrufsfrist ────────────────────────────────────────────
    {
        "id": "deadline",
        "label": "Widerrufsfrist (14 Tage)",
        "level": 1, "parent": None,
        "patterns": [
            r"14\s+tage", r"vierzehn\s+tage",
            r"14\s+days", r"fourteen\s+days",
        ],
        "severity": "HIGH",
        "hint": "§355 Abs. 2 BGB: Die Widerrufsfrist betraegt 14 Tage. Haeufiger Fehler: Wird die Belehrung fehlerhaft erteilt, verlaengert sich die Frist auf 12 Monate und 14 Tage (§356 Abs. 3 S. 2 BGB). Exakte Formulierung ist daher geschaeftskritisch.",
    },
    {
        "id": "deadline_calendar_days",
        "label": "Kalendertage explizit angegeben",
        "level": 2, "parent": "deadline",
        "patterns": [
            r"14\s+kalendertage|vierzehn\s+kalendertage",
            r"14\s+calendar\s+days",
        ],
        "severity": "LOW",
        "hint": "Die gesetzliche Musterbelehrung (Anlage 1 zu Art. 246a EGBGB) spricht von 'vierzehn Tagen'. Kalendertage statt Werktage — die Klarstellung vermeidet Abmahnungen. BGH-Rechtsprechung: Unklare Fristangaben gelten als fehlerhafte Belehrung.",
    },
    {
        "id": "deadline_receipt_trigger",
        "label": "Fristbeginn bei Zugang/Erhalt definiert",
        "level": 2, "parent": "deadline",
        "patterns": [
            r"frist\s+beginnt.*(?:zugang|erhalt|empfang|tag\s+nach)",
            r"ab\s+(?:dem\s+)?(?:tag|zeitpunkt).*(?:zugang|erhalt|empfang|lieferung)",
            r"beginnt\s+(?:mit|ab)\s+(?:dem\s+)?(?:zugang|erhalt)",
        ],
        "severity": "MEDIUM",
        "hint": "§356 Abs. 2 BGB unterscheidet den Fristbeginn nach Vertragstyp: Bei Waren ab Erhalt (Nr. 1a), bei Dienstleistungen ab Vertragsschluss (Nr. 2). Haeufiger Fehler: Pauschal 'ab Vertragsschluss' auch fuer Warenlieferungen — das ist falsch.",
    },

    # ── L1: Form des Widerrufs ────────────────────────────────────────
    {
        "id": "form",
        "label": "Form des Widerrufs",
        "level": 1, "parent": None,
        "patterns": [
            r"widerrufsformular", r"muster.?widerruf",
            r"withdrawal\s+form", r"formular",
        ],
        "severity": "MEDIUM",
        "hint": "Art. 246a §1 Abs. 2 Nr. 1 EGBGB verlangt einen Hinweis auf das Muster-Widerrufsformular (Anlage 2 zu Art. 246a EGBGB). Das Formular muss dem Verbraucher zur Verfuegung gestellt werden — ein blosser Verweis auf §355 BGB genuegt nicht.",
    },
    {
        "id": "form_text_required",
        "label": "Textform-Anforderung (Brief, E-Mail, Fax)",
        "level": 2, "parent": "form",
        "patterns": [
            r"(?:textform|schriftlich|per\s+(?:brief|e-?mail|fax|post))",
            r"(?:mittels|durch)\s+(?:einer?\s+)?(?:eindeutige|klare)\w*\s+erkl(?:ae|ä)rung",
        ],
        "severity": "LOW",
        "hint": "§355 Abs. 1 S. 3 BGB: Der Widerruf erfolgt durch 'eindeutige Erklaerung'. Textform (§126b BGB) genuegt — Brief, E-Mail oder Fax. Achtung: Telefonischer Widerruf ist ebenfalls wirksam; Sie duerfen den Widerruf nicht auf Schriftform beschraenken.",
    },
    {
        "id": "model_form",
        "label": "Muster-Widerrufsformular beigefuegt/verlinkt",
        "level": 2, "parent": "form",
        "patterns": [
            r"muster[\-\s]?widerrufsformular",
            r"(?:beigef(?:ue|ü)gt|anlage|anhang|formular).*widerruf",
            r"widerruf.*(?:beigef(?:ue|ü)gt|anlage|anhang|formular)",
        ],
        "severity": "LOW",
        "hint": "Das Muster-Widerrufsformular (Anlage 2 zu Art. 246a EGBGB) ist gesetzlich vorgeschrieben und darf inhaltlich nicht veraendert werden. Haeufiger Fehler: Eigenes Formular statt Gesetzesmuster — das macht die Belehrung angreifbar (vgl. BGH, Az. I ZR 7/16).",
    },

    # ── L1: Folgen des Widerrufs ──────────────────────────────────────
    {
        "id": "consequences",
        "label": "Folgen des Widerrufs",
        "level": 1, "parent": None,
        "patterns": [
            r"folgen\s+des\s+widerrufs",
            r"consequences\s+of\s+withdrawal",
            r"r(?:ue|ü)ckerstattung",
        ],
        "severity": "MEDIUM",
        "hint": "Art. 246a §1 Abs. 2 Nr. 2 EGBGB verlangt Informationen ueber die Folgen des Widerrufs. Pflichtinhalte: Rueckerstattungspflicht (§357 Abs. 1 BGB), Ruecksendepflicht (§357 Abs. 1 BGB) und Wertersatz-Regelung (§357a BGB).",
    },
    {
        "id": "refund_timeline",
        "label": "Rueckerstattung innerhalb von 14 Tagen",
        "level": 2, "parent": "consequences",
        "patterns": [
            r"(?:r(?:ue|ü)ckerstattung|r(?:ue|ü)ckzahlung|erstatten).*14\s+tage",
            r"14\s+tage.*(?:r(?:ue|ü)ckerstatt|r(?:ue|ü)ckzahl|erstatt)",
            r"(?:unverz(?:ue|ü)glich|sp(?:ae|ä)testens).*(?:r(?:ue|ü)ck|erstatt)",
        ],
        "severity": "MEDIUM",
        "hint": "§357 Abs. 1 BGB: Rueckzahlung binnen 14 Tagen nach Zugang des Widerrufs. Achtung: Bei Warenlieferung darf die Rueckzahlung bis zum Erhalt der Ruecksendung zurueckgehalten werden (§357 Abs. 4 BGB) — dieses Zurueckbehaltungsrecht muss erwaehnt werden.",
    },
    {
        "id": "return_costs",
        "label": "Ruecksendekosten-Regelung",
        "level": 2, "parent": "consequences",
        "patterns": [
            r"(?:r(?:ue|ü)cksende|versand|porto)kosten",
            r"kosten\s+(?:der|fuer|für)\s+r(?:ue|ü)cksendung",
            r"(?:tragen|uebernehmen|übernehmen)\s+(?:die\s+)?(?:kosten|r(?:ue|ü)cksende)",
        ],
        "severity": "LOW",
        "hint": "§357 Abs. 5 BGB: Ruecksendekosten traegt der Verbraucher, wenn der Unternehmer dies vorab mitgeteilt hat. Fehlt diese Info in der Belehrung, traegt der Unternehmer die Kosten. Bei >40kg-Waren: Kostenvoranschlag fuer Ruecksendung angeben (§357 Abs. 5 S. 2 BGB).",
    },

    # ── L1: Empfaenger des Widerrufs ──────────────────────────────────
    {
        "id": "recipient",
        "label": "Empfaenger des Widerrufs (Name + Anschrift)",
        "level": 1, "parent": None,
        "patterns": [
            r"widerruf.*(?:richten|senden|erkl(?:ae|ä)ren)\s+(?:an|gegen(?:ue|ü)ber)",
            r"(?:name|firma|anschrift).*widerruf",
            r"widerruf.*(?:per|via|an)",
        ],
        "severity": "MEDIUM",
        "hint": "Art. 246a §1 Abs. 2 Nr. 1 EGBGB verlangt Name, Anschrift und ggf. Telefonnummer/E-Mail des Widerrufsempfaengers. Fehlt die Adresse, ist die Belehrung fehlerhaft und die Widerrufsfrist beginnt nicht zu laufen (§356 Abs. 3 BGB).",
    },
    {
        "id": "recipient_full_address",
        "label": "Vollstaendige Adresse des Empfaengers",
        "level": 2, "parent": "recipient",
        "patterns": [
            r"widerruf.*(?:d[\-\s]?)?\d{5}\s+[a-z\u00c0-\u017e]",
            r"(?:d[\-\s]?)?\d{5}\s+[a-z\u00c0-\u017e]\w+.*widerruf",
        ],
        "severity": "LOW",
        "hint": "Die gesetzliche Musterbelehrung verlangt: '[Name des Unternehmers], [Anschrift], [ggf. Telefon/Fax/E-Mail]'. Haeufiger Fehler: Nur E-Mail-Adresse ohne Postanschrift — der Verbraucher muss auch postalisch widerrufen koennen.",
    },

    # ── L1: Hinweis kein Grund erforderlich ───────────────────────────
    {
        "id": "no_reason",
        "label": "Hinweis: kein Grund erforderlich",
        "level": 1, "parent": None,
        "patterns": [
            r"ohne\s+(?:angabe|nennung).*(?:grund|gr(?:ue|ü)nde)",
            r"(?:kein|keine).*(?:begr(?:ue|ü)ndung|grund).*(?:erforderlich|n(?:oe|ö)tig)",
        ],
        "severity": "LOW",
        "hint": "Die gesetzliche Musterbelehrung (Anlage 1 zu Art. 246a EGBGB) enthaelt: 'Sie muessen uns [...] mittels einer eindeutigen Erklaerung [...] informieren' — ohne Begruendungspflicht. Manche Shops verlangen faelschlich einen Grund; das ist unzulaessig.",
    },

    # ── L1: Online-Kuendigungsbutton ──────────────────────────────────
    {
        "id": "digital_button",
        "label": "Online-Kuendigungsbutton (§312k BGB)",
        "level": 1, "parent": None,
        "patterns": [
            r"k(?:ue|ü)ndigungsbutton", r"§\s*312k",
            r"online.*k(?:ue|ü)ndig",
            r"k(?:ue|ü)ndigung.*(?:button|link|formular|online)",
        ],
        "severity": "MEDIUM",
        "hint": "§312k BGB (seit 01.07.2022): Pflicht zum Kuendigungsbutton fuer Dauerschuldverhaeltnisse (Abos, Mitgliedschaften). Der Button muss 'Vertraege hier kuendigen' heissen, direkt auf eine Bestaetigungsseite fuehren und ohne Login erreichbar sein.",
    },

    # ── Neue L1: Ausnahme digitale Inhalte ────────────────────────────
    {
        "id": "digital_content_exception",
        "label": "Ausnahme fuer digitale Inhalte (§356 BGB)",
        "level": 1, "parent": None,
        "patterns": [
            r"§\s*356",
            r"digital\w*\s+(?:inhalte?|g(?:ue|ü)ter|dienstleistung)",
            r"(?:erlischt|verl(?:ue|ü)st|kein\s+widerrufsrecht).*digital",
            r"(?:ausnahme|ausschluss).*widerruf.*digital",
        ],
        "severity": "LOW",
        "hint": "§356 Abs. 5 BGB: Bei digitalen Inhalten erlischt das Widerrufsrecht, wenn der Verbraucher ausdruecklich zustimmt und bestaetigt, dass er vom Erloeschen weiss. Pflicht: Checkbox + Bestaetigungsmail. Fehlt die Belehrung, bleibt das Widerrufsrecht 14 Tage bestehen.",
    },
]
