"""Schemas — Video intelligence analysis."""

from typing import Any
from uuid import UUID

from pydantic import BaseModel, Field, model_validator

from app.schemas.common import StubMeta


class VideoIntelligenceRequest(BaseModel):
    """POST /api/v1/video-intelligence"""

    correlation_id: UUID | None = None
    interview_id: str
    video_base64: str | None = None
    source_url: str | None = None
    sample_fps: float = Field(default=1.0, ge=0.1, le=5.0)
    options: dict[str, Any] = Field(default_factory=dict)

    @model_validator(mode="after")
    def require_one_source(self) -> "VideoIntelligenceRequest":
        if bool(self.video_base64) == bool(self.source_url):
            raise ValueError("Provide exactly one of video_base64 or source_url")
        return self


class VideoSignal(BaseModel):
    name: str
    score: float | None = None
    notes: str | None = None


class VideoIntelligenceResponse(StubMeta):
    correlation_id: UUID | None = None
    interview_id: str
    engagement_score: float | None = None
    signals: list[VideoSignal] = Field(default_factory=list)
    warnings: list[str] = Field(default_factory=list)
