"""Schemas for Interpretation-in-Map (step 5).

A thin adapter that evaluates a customer interpretation WITHIN the already-built
RegulatoryMap — it does not assess abstract legal questions. Application types
only; no compliance-meta-model classes (freeze v1.0 untouched).
"""

from __future__ import annotations

from typing import List

from pydantic import BaseModel, Field

from compliance.product_scope.schemas import UnsupportedDomain
from compliance.profile.canonical import CanonicalProductRegulatoryProfile
from compliance.reasoning.enums import Confidence, InterpretationVerdict


class InterpretationInMapRequest(BaseModel):
    product_profile: CanonicalProductRegulatoryProfile
    customer_interpretation: str


class InterpretationInMapResult(BaseModel):
    raw_interpretation: str
    assessment: InterpretationVerdict
    in_scope_of_map: bool  # True if it touches a regulation/obligation present in the map
    affected_regulations: List[str] = Field(default_factory=list)  # intersected with the map
    affected_obligations: List[str] = Field(default_factory=list)  # intersected (registry-linked)
    related_uncertainties: List[str] = Field(default_factory=list)  # map-uncertain regs it touches
    future_corpus_domains: List[UnsupportedDomain] = Field(default_factory=list)  # NOT evaluated
    corrected_interpretation: str = ""
    risks: List[str] = Field(default_factory=list)
    legal_basis_refs: List[str] = Field(default_factory=list)
    explanation: str = ""
    confidence: Confidence = Confidence.MEDIUM
