from datetime import datetime
from decimal import Decimal
from typing import Optional
from uuid import UUID

from pydantic import BaseModel


class PlotResponse(BaseModel):
    id: UUID
    tenant_id: UUID
    plot_ref: str
    section_id: Optional[UUID] = None
    plot_type_id: Optional[UUID] = None
    status: str
    latitude: Optional[float] = None
    longitude: Optional[float] = None
    price_override: Optional[float] = None
    notes: Optional[str] = None
    public_description: Optional[str] = None
    is_veteran_section: bool

    # INDL-41 detail-panel fields
    reserved_by: Optional[str] = None
    reserved_at: Optional[datetime] = None
    label_manual: Optional[str] = None
    rotation_deg: Optional[Decimal] = None

    created_at: datetime
    updated_at: datetime

    # Joined / assembled fields populated by the serializer (NOT read from the ORM
    # directly — geometry is a WKTElement on the model, converted in _serialize_plot).
    section_code: Optional[str] = None
    plot_type_name: Optional[str] = None
    display_ref: Optional[str] = None   # label_manual or plot_ref (AC-25)

    model_config = {"from_attributes": True}
