import uuid from pydantic import BaseModel, EmailStr, ConfigDict from datetime import datetime from typing import Optional, Any, Dict from app.models.guest import GuestStatus from uuid import UUID class GuestBase(BaseModel): event_id: UUID invited_by: UUID user_id: Optional[UUID] = None full_name: str email: Optional[EmailStr] = None phone: Optional[str] = None max_additional_guests: Optional[int] = 0 dietary_restrictions: Optional[str] = None notes: Optional[str] = None custom_fields: Optional[Dict[str, Any]] = None can_bring_guests: Optional[bool] = False class GuestCreate(GuestBase): invitation_code: str class GuestUpdate(BaseModel): full_name: Optional[str] = None email: Optional[EmailStr] = None phone: Optional[str] = None status: Optional[GuestStatus] = None max_additional_guests: Optional[int] = None actual_additional_guests: Optional[int] = None dietary_restrictions: Optional[str] = None notes: Optional[str] = None custom_fields: Optional[Dict[str, Any]] = None is_blocked: Optional[bool] = None can_bring_guests: Optional[bool] = None class GuestRead(GuestBase): id: UUID status: GuestStatus invitation_sent_at: Optional[datetime] = None response_date: Optional[datetime] = None actual_additional_guests: int is_blocked: bool model_config = ConfigDict(from_attributes=True)