from datetime import datetime
from pydantic import BaseModel, Field


class DetectRequest(BaseModel):
    event_id: str
    site_id: int
    vehicle_id: str
    operator_id: str | None = None
    dispatch_weight: float
    received_weight: float | None = None
    expected_duration_minutes: float | None = None
    actual_duration_minutes: float | None = None
    gps_trace: list[tuple[float, float]] = Field(default_factory=list)
    timestamp: datetime


class DetectResponse(BaseModel):
    event_id: str
    anomaly_score: float
    is_anomaly: bool
    risk_reasons: list[str]
    deviation_metrics: dict


class PredictRequest(BaseModel):
    event_id: str
    site_id: int
    vehicle_id: str
    operator_id: str | None = None
    dispatch_weight: float
    received_weight: float | None = None
    expected_duration_minutes: float | None = None
    actual_duration_minutes: float | None = None
    deviation_distance_km: float = 0.0
    unexpected_stop_minutes: float = 0.0
    face_verified: bool | None = None
    timestamp: datetime


class PredictResponse(BaseModel):
    event_id: str
    theft_risk_probability: float
    risk_class: str
    threshold: float
    top_contributors: dict[str, float]
    blocked: bool


class GpsPoint(BaseModel):
    vehicle_id: str
    lat: float
    lon: float
    timestamp: datetime


class FaceEnrollRequest(BaseModel):
    person_id: str
    image_b64: str


class FaceVerifyRequest(BaseModel):
    person_id: str
    image_b64: str


class FaceVerifyResponse(BaseModel):
    person_id: str
    matched: bool
    score: float
    provider: str
