"""Schemas — Face verification / proctoring AI signals (SOW enterprise)."""

from typing import Any
from uuid import UUID

from pydantic import BaseModel, Field, model_validator

from app.schemas.common import StubMeta


class FaceVerificationRequest(BaseModel):
    """POST /api/v1/face-verification/verify"""

    correlation_id: UUID | None = None
    interview_id: str
    candidate_id: str | None = None
    idle_image_base64: str | None = None
    live_image_base64: str | None = None
    id_image_base64: str | None = None
    source_url: str | None = None
    options: dict[str, Any] = Field(default_factory=dict)

    @model_validator(mode="after")
    def require_media(self) -> "FaceVerificationRequest":
        if not any(
            [
                self.idle_image_base64,
                self.live_image_base64,
                self.id_image_base64,
                self.source_url,
            ]
        ):
            raise ValueError(
                "Provide at least one of idle_image_base64, live_image_base64, "
                "id_image_base64, or source_url"
            )
        return self


class FaceVerificationResponse(StubMeta):
    correlation_id: UUID | None = None
    interview_id: str
    verified: bool | None = None
    match_score: float | None = None
    liveness_score: float | None = None
    warnings: list[str] = Field(default_factory=list)
