"""Shared normative language patterns for assertion classification.

Extracted from decomposition_pass.py for reuse in the assertion engine.
"""

import re

_PFLICHT_SIGNALS = [
    r"\bmüssen\b", r"\bmuss\b", r"\bhat\s+sicherzustellen\b",
    r"\bhaben\s+sicherzustellen\b", r"\bsind\s+verpflichtet\b",
    r"\bist\s+verpflichtet\b",
    r"\bist\s+zu\s+\w+en\b", r"\bsind\s+zu\s+\w+en\b",
    r"\bhat\s+zu\s+\w+en\b", r"\bhaben\s+zu\s+\w+en\b",
    r"\bist\s+\w+zu\w+en\b", r"\bsind\s+\w+zu\w+en\b",
    r"\bist\s+\w+\s+zu\s+\w+en\b", r"\bsind\s+\w+\s+zu\s+\w+en\b",
    r"\bhat\s+\w+\s+zu\s+\w+en\b", r"\bhaben\s+\w+\s+zu\s+\w+en\b",
    r"\bshall\b", r"\bmust\b", r"\brequired\b",
    r"\b\w+zuteilen\b", r"\b\w+zuwenden\b", r"\b\w+zustellen\b", r"\b\w+zulegen\b",
    r"\b\w+zunehmen\b", r"\b\w+zuführen\b", r"\b\w+zuhalten\b", r"\b\w+zusetzen\b",
    r"\b\w+zuweisen\b", r"\b\w+zuordnen\b", r"\b\w+zufügen\b", r"\b\w+zugeben\b",
    r"\bist\b.{1,80}\bzu\s+\w+en\b", r"\bsind\b.{1,80}\bzu\s+\w+en\b",
]
PFLICHT_RE = re.compile("|".join(_PFLICHT_SIGNALS), re.IGNORECASE)

_EMPFEHLUNG_SIGNALS = [
    r"\bsoll\b", r"\bsollen\b", r"\bsollte\b", r"\bsollten\b",
    r"\bgewährleisten\b", r"\bsicherstellen\b",
    r"\bshould\b", r"\bensure\b", r"\brecommend\w*\b",
    r"\bnachweisen\b", r"\beinhalten\b", r"\bunterlassen\b", r"\bwahren\b",
    r"\bdokumentieren\b", r"\bimplementieren\b", r"\büberprüfen\b", r"\büberwachen\b",
    r"\bprüfen,\s+ob\b", r"\bkontrollieren,\s+ob\b",
]
EMPFEHLUNG_RE = re.compile("|".join(_EMPFEHLUNG_SIGNALS), re.IGNORECASE)

_KANN_SIGNALS = [
    r"\bkann\b", r"\bkönnen\b", r"\bdarf\b", r"\bdürfen\b",
    r"\bmay\b", r"\boptional\b",
]
KANN_RE = re.compile("|".join(_KANN_SIGNALS), re.IGNORECASE)

NORMATIVE_RE = re.compile(
    "|".join(_PFLICHT_SIGNALS + _EMPFEHLUNG_SIGNALS + _KANN_SIGNALS),
    re.IGNORECASE,
)

_RATIONALE_SIGNALS = [
    r"\bda\s+", r"\bweil\b", r"\bgrund\b", r"\berwägung",
    r"\bbecause\b", r"\breason\b", r"\brationale\b",
    r"\bkönnen\s+.*\s+verursachen\b", r"\bführt\s+zu\b",
]
RATIONALE_RE = re.compile("|".join(_RATIONALE_SIGNALS), re.IGNORECASE)

# Evidence-related keywords (for fact detection)
_EVIDENCE_KEYWORDS = [
    r"\bnachweis\b", r"\bzertifikat\b", r"\baudit.report\b",
    r"\bprotokoll\b", r"\bdokumentation\b", r"\bbericht\b",
    r"\bcertificate\b", r"\bevidence\b", r"\bproof\b",
]
EVIDENCE_RE = re.compile("|".join(_EVIDENCE_KEYWORDS), re.IGNORECASE)
