"""Pydantic schemas for Panorama."""

from datetime import datetime
from typing import Any, Optional

from pydantic import BaseModel, Field


class PanoramaCreate(BaseModel):
    image_url: str = Field(..., max_length=500)
    thumbnail_url: Optional[str] = Field(None, max_length=500)
    sequence: int = 0
    default_yaw: float = Field(default=0.0, ge=0, le=360)
    default_pitch: float = Field(default=0.0, ge=-90, le=90)
    capture_order: int = 0
    position_x: float = 0.0
    position_y: float = 0.0
    position_z: float = 0.0
    metadata: Optional[dict[str, Any]] = None


class PanoramaUpdate(BaseModel):
    image_url: Optional[str] = Field(None, max_length=500)
    thumbnail_url: Optional[str] = Field(None, max_length=500)
    sequence: Optional[int] = None
    default_yaw: Optional[float] = Field(None, ge=0, le=360)
    default_pitch: Optional[float] = Field(None, ge=-90, le=90)
    capture_order: Optional[int] = None
    position_x: Optional[float] = None
    position_y: Optional[float] = None
    position_z: Optional[float] = None
    metadata: Optional[dict[str, Any]] = None


class PanoramaRead(BaseModel):
    id: str
    room_id: str
    image_url: str
    thumbnail_url: Optional[str]
    sequence: int
    default_yaw: float
    default_pitch: float
    capture_order: int
    position_x: float
    position_y: float
    position_z: float
    metadata: Optional[Any]
    created_at: datetime
    updated_at: datetime

    model_config = {"from_attributes": True}
