"""Pydantic schemas for Room."""

from datetime import datetime
from typing import Optional

from pydantic import BaseModel, Field


ROOM_TYPES = [
    "living_room",
    "kitchen",
    "master_bedroom",
    "bedroom",
    "bathroom",
    "garage",
    "corridor",
    "stairs",
    "balcony",
    "study",
    "dining_room",
    "other",
]

ROOM_TYPE_PATTERN = "^(" + "|".join(ROOM_TYPES) + ")$"


class RoomCreate(BaseModel):
    name: str = Field(..., min_length=1, max_length=200)
    type: str = Field(..., pattern=ROOM_TYPE_PATTERN)
    sort_order: int = 0
    cover_pano_id: Optional[str] = None


class RoomUpdate(BaseModel):
    name: Optional[str] = Field(None, min_length=1, max_length=200)
    type: Optional[str] = Field(None, pattern=ROOM_TYPE_PATTERN)
    sort_order: Optional[int] = None
    cover_pano_id: Optional[str] = None


class RoomRead(BaseModel):
    id: str
    floor_id: str
    name: str
    type: str
    sort_order: int
    cover_pano_id: Optional[str]
    created_at: datetime
    updated_at: datetime

    model_config = {"from_attributes": True}
