import uuid from datetime import datetime from typing import Any, Optional from pydantic import BaseModel, Field class ContactLeadCreate(BaseModel): name: str = Field(min_length=1, max_length=255) email: str phone: Optional[str] = Field(default=None, max_length=50) service: Optional[str] = Field(default=None, max_length=255) services: list[str] = Field(default_factory=list) petName: Optional[str] = Field(default=None, max_length=100) petBreed: Optional[str] = Field(default=None, max_length=100) location: Optional[str] = Field(default=None, max_length=100) serviceAreaStatus: Optional[str] = Field(default=None, max_length=32) message: Optional[str] = Field(default=None, max_length=5000) source: str = Field(default="contact_form", max_length=50) class ContactLeadResponse(BaseModel): id: uuid.UUID full_name: str email: str phone: Optional[str] requested_services: Optional[str] pet_name: Optional[str] pet_breed: Optional[str] suburb: Optional[str] service_area_status: Optional[str] message: Optional[str] source: str status: str notes: Optional[str] invited_at: Optional[datetime] invited_member_id: Optional[uuid.UUID] metadata_json: Optional[dict[str, Any]] created_at: datetime updated_at: datetime model_config = {"from_attributes": True} class ContactLeadUpdate(BaseModel): status: Optional[str] = Field(default=None, max_length=32) notes: Optional[str] = Field(default=None, max_length=5000) class ContactLeadInviteRequest(BaseModel): send_email: bool = True class ContactLeadInviteResponse(BaseModel): lead: ContactLeadResponse member_id: uuid.UUID member_status: str