"""Heuristic keyword-based classification fallback."""

# Keyword patterns per category — order matters (first match wins on tie)
KEYWORD_MAP: list[tuple[str, list[str]]] = [
    ("VVT", [
        "verarbeitungsverzeichnis", "verzeichnis von verarbeitungstaetigkeiten",
        "verarbeitungstaetigkeit", "art. 30", "art 30", "zweck der verarbeitung",
        "kategorie betroffener personen", "datenkategorien",
    ]),
    ("TOM", [
        "technisch-organisatorische massnahmen", "technische und organisatorische",
        "art. 32", "art 32", "zutrittskontrolle", "zugangskontrolle",
        "zugriffskontrolle", "verschluesselungskonzept", "pseudonymisierung",
    ]),
    ("DSE", [
        "datenschutzerklaerung", "datenschutzhinweise", "privacy policy",
        "informationspflichten", "art. 13", "art. 14", "art 13", "art 14",
        "betroffenenrechte", "verantwortlicher im sinne",
    ]),
    ("AVV", [
        "auftragsverarbeitung", "auftragsverarbeitungsvertrag",
        "art. 28", "art 28", "weisungsgebundenheit", "unterauftragnehmer",
        "subunternehmer",
    ]),
    ("DSFA", [
        "datenschutz-folgenabschaetzung", "folgenabschaetzung",
        "art. 35", "art 35", "risikoanalyse", "hohes risiko",
        "systematische beschreibung",
    ]),
    ("Loeschkonzept", [
        "loeschkonzept", "loeschfristen", "aufbewahrungsfrist",
        "loeschung personenbezogener", "speicherdauer", "vorhaltefrist",
    ]),
    ("Einwilligung", [
        "einwilligung", "einwilligungserklaerung", "consent",
        "freiwillige zustimmung", "widerruf der einwilligung",
    ]),
    ("Vertrag", [
        "vertrag", "vereinbarung", "vertragspartner",
        "leistungsbeschreibung", "vertragsgegenstand",
    ]),
    ("Richtlinie", [
        "richtlinie", "policy", "datenschutzrichtlinie", "leitlinie",
        "verhaltensregeln", "organisationsanweisung",
    ]),
    ("Schulungsnachweis", [
        "schulungsnachweis", "schulung", "training", "datenschutzschulung",
        "teilnahmebestaetigung", "fortbildung datenschutz",
    ]),
]

MAX_KEYWORD_CONFIDENCE = 0.3


def keyword_classify(text: str, filename: str) -> dict:
    """Classify document by keyword matching. Confidence capped at 0.3."""
    combined = (filename + " " + text).lower()

    best_category = "Sonstiges"
    best_score = 0

    for category, keywords in KEYWORD_MAP:
        score = sum(1 for kw in keywords if kw in combined)
        if score > best_score:
            best_score = score
            best_category = category

    if best_score == 0:
        return {
            "classification": "Sonstiges",
            "confidence": 0.1,
            "reasoning": "Keine Schluesselwoerter gefunden (Keyword-Fallback)",
        }

    confidence = min(best_score * 0.1, MAX_KEYWORD_CONFIDENCE)
    return {
        "classification": best_category,
        "confidence": confidence,
        "reasoning": f"Keyword-Fallback: {best_score} Treffer fuer {best_category}",
    }
