"""Layer-0 Regex-Boost für Cookie-Policy-Agent v3.

Analog zu impressum/regex_boost.py: meine 12 Cookie-Policy-Patterns
(aus mcs.py) werden als Vor-Stufe vor dem Keyword-Match aus
doc_check_controls (381 Cookie-MCs) genutzt. Wenn Pattern hits, kann
das thematisch passende DB-MC zu PASS überschrieben werden.

User-Vorgabe 2026-06-09: manuelle Initial-Seeds sind erlaubt, das
Auto-Learning ergänzt zur Laufzeit.
"""

from __future__ import annotations

import logging

from .mcs import MCS

logger = logging.getLogger(__name__)


# Initial-Seed pro field_id — auf Cookie-Policy-Pflichten abgestimmt.
BOOST_KEYWORDS: dict[str, tuple[str, ...]] = {
    "categories_named": (
        "kategorie", "essentiell", "funktional", "analytics",
        "marketing", "notwendig", "tracking",
    ),
    "purpose_described": (
        "zweck", "zwecke", "verarbeitungszweck", "verwendungszweck",
        "dient zu", "dient zur",
    ),
    "retention_duration": (
        "speicherdauer", "laufzeit", "dauer", "gültigkeitsdauer",
        "session", "persistent", "tag", "monat", "jahr",
    ),
    "vendor_recipients": (
        "empfänger", "vendor", "drittanbieter", "third-party",
        "drittland", "anbieter", "verantwortlicher",
    ),
    "opt_out_mechanism": (
        "opt-out", "widerruf", "widerrufen", "deaktivieren",
        "abwählen", "einstellungen ändern",
    ),
    "banner_reopen": (
        "cookie-einstellungen", "banner", "präferenzen",
        "einwilligung verwalten", "consent",
    ),
    "version_date": (
        "stand", "aktualisierung", "version", "letzte änderung",
        "gültig ab",
    ),
    "third_country_transfer": (
        "drittland", "drittstaat", "usa", "scc",
        "standardvertragsklauseln", "angemessenheitsbeschluss",
        "data privacy framework", "dpf",
    ),
    "legal_basis": (
        "rechtsgrundlage", "einwilligung", "berechtigtes interesse",
        "art. 6", "§ 25 tdddg", "tdddg",
    ),
    "cookie_table_or_list": (
        "tabelle", "liste", "cookie-name", "_ga", "_fbp",
        "optanonconsent",
    ),
    "dpo_contact": (
        "datenschutzbeauftragter", "datenschutz-team", "dsb",
        "datenschutz@",
    ),
    "browser_settings_hint": (
        "browser-einstellungen", "chrome", "firefox", "safari",
        "edge", "cookies löschen", "cookies blockieren",
    ),
}


def compute_regex_boosts(text: str) -> set[str]:
    """Welche field_ids wurden im Cookie-Policy-Text durch Patterns
    erkannt?"""
    if not text or len(text) < 50:
        return set()
    hits: set[str] = set()
    for mc in MCS:
        # require_all / any-Logik aus mcs.py respektieren
        if mc.require_all:
            ok = all(p.search(text) for p in mc.patterns)
        else:
            ok = any(p.search(text) for p in mc.patterns)
        if ok:
            hits.add(mc.field_id)
    return hits


def boost_matches_db_mc(
    boosts: set[str],
    pass_criteria: list,
    fail_criteria: list | None = None,
) -> str | None:
    """≥2 Boost-Keywords im kombinierten pass+fail-Text → match."""
    if not boosts:
        return None
    parts: list[str] = []
    for c in (pass_criteria or []):
        if c: parts.append(str(c).lower())
    for c in (fail_criteria or []):
        if c: parts.append(str(c).lower())
    if not parts:
        return None
    crit_text = " ".join(parts)
    best: tuple[int, str] | None = None
    for field_id in boosts:
        kws = BOOST_KEYWORDS.get(field_id) or ()
        match_count = sum(1 for kw in kws if kw in crit_text)
        if match_count >= 2:
            if best is None or match_count > best[0]:
                best = (match_count, field_id)
    return best[1] if best else None
