from __future__ import annotations from datetime import datetime from decimal import Decimal from uuid import UUID from typing import Literal from pydantic import BaseModel, ConfigDict from app.schemas.catalog import ( AmenityOut, ImobiliariaOut, PropertyTypeOut, CityOut, NeighborhoodOut, ) class PropertyPhotoOut(BaseModel): model_config = ConfigDict(from_attributes=True) url: str alt_text: str display_order: int class PropertyOut(BaseModel): model_config = ConfigDict(from_attributes=True) id: UUID title: str slug: str code: str | None = None price: Decimal condo_fee: Decimal | None iptu_anual: Decimal | None = None type: Literal["venda", "aluguel"] subtype: PropertyTypeOut | None bedrooms: int bathrooms: int parking_spots: int area_m2: int city: CityOut | None neighborhood: NeighborhoodOut | None imobiliaria: ImobiliariaOut | None = None is_featured: bool created_at: datetime | None = None photos: list[PropertyPhotoOut] amenities: list[AmenityOut] = [] class PaginatedPropertiesOut(BaseModel): items: list[PropertyOut] total: int page: int per_page: int pages: int class PropertyDetailOut(PropertyOut): address: str | None = None code: str | None = None description: str | None = None video_url: str | None = None video_position: Literal['carousel', 'section'] = 'section'