"""Enumerations for the Regulatory Reasoning Engine.

Kept dependency-free and Python 3.9 compatible (str-Enums, no `|` unions).
The reasoning layer sits ON TOP of the Legal Knowledge Graph (obligation
registry) and the Compliance Execution Graph (control mapping / evidence).
See memory `project_compliance_graph.md` for the cross-session contract.
"""

from __future__ import annotations

from enum import Enum


class ManufacturerRole(str, Enum):
    MANUFACTURER = "manufacturer"
    IMPORTER = "importer"
    DISTRIBUTOR = "distributor"
    INTEGRATOR = "integrator"
    OPERATOR = "operator"
    SERVICE_PROVIDER = "service_provider"


class ProductLifecyclePhase(str, Enum):
    DEVELOPMENT = "development"
    PLACING_ON_MARKET = "placing_on_market"
    OPERATION = "operation"
    MAINTENANCE = "maintenance"
    UPDATE = "update"
    END_OF_LIFE = "end_of_life"


class MarketModel(str, Enum):
    B2B = "b2b"
    B2C = "b2c"
    BOTH = "both"


class ApplicabilityStatus(str, Enum):
    APPLICABLE = "applicable"
    PARTIALLY_APPLICABLE = "partially_applicable"
    UNCERTAIN = "uncertain"
    NOT_APPLICABLE = "not_applicable"


class Confidence(str, Enum):
    HIGH = "high"
    MEDIUM = "medium"
    LOW = "low"


class AuthorityLevel(str, Enum):
    """How binding a statement is — answers MUST visibly separate these."""

    LEGAL_TEXT = "legal_text"
    RECITAL = "recital"
    GUIDANCE = "guidance"
    HARMONIZED_STANDARD = "harmonized_standard"
    TECHNICAL_STANDARD = "technical_standard"
    BEST_PRACTICE = "best_practice"
    INTERNAL_INTERPRETATION = "internal_interpretation"


class OverlapType(str, Enum):
    IDENTICAL = "identical"
    SIMILAR = "similar"
    COMPLEMENTARY = "complementary"
    CONFLICTING = "conflicting"
    DIFFERENT_SCOPE = "different_scope"


class ClaimCoverage(str, Enum):
    """How a customer's *claim* relates to an obligation — Welt 1 (reasoning).

    This is NOT a conformity verdict. It judges only the customer's statement,
    never whether the obligation is actually met. The real compliance verdict
    (erfüllt/offen/unklar from verified evidence) is `ComplianceStatus`, owned by
    the Compliance Execution Graph — the two must never be conflated.
    """

    POTENTIALLY_ADDRESSES = "potentially_addresses"
    PARTIALLY_ADDRESSES = "partially_addresses"
    DOES_NOT_ADDRESS = "does_not_address"
    INSUFFICIENT_INFORMATION = "insufficient_information"


class InterpretationVerdict(str, Enum):
    PLAUSIBLE = "plausible"
    TOO_NARROW = "too_narrow"
    TOO_BROAD = "too_broad"
    PARTIALLY_CORRECT = "partially_correct"
    UNSUPPORTED = "unsupported"
    UNCERTAIN = "uncertain"
