from typing import Optional, List
from datetime import date, datetime, time
from uuid import UUID
from pydantic import BaseModel, Field


class BurialInfoResponse(BaseModel):
    id: UUID
    record_id: UUID
    interment_type: Optional[str] = None
    interment_date: Optional[date] = None
    interment_time: Optional[time] = None
    casket_type: Optional[str] = None
    depth_m: Optional[float] = None
    officiant: Optional[str] = None
    attendees: Optional[int] = None
    service_notes: Optional[str] = None
    created_at: datetime

    model_config = {"from_attributes": True}


class FamilyContactResponse(BaseModel):
    id: UUID
    record_id: UUID
    relationship: Optional[str] = Field(None, alias="relationship_type")
    first_name: str
    last_name: str
    email: Optional[str] = None
    phone: Optional[str] = None
    address: Optional[str] = None
    is_primary: bool
    is_plot_owner: bool
    created_at: datetime

    model_config = {"from_attributes": True, "populate_by_name": True}


class RecordSummaryResponse(BaseModel):
    id: UUID
    first_name: str
    middle_name: Optional[str] = None
    last_name: str
    maiden_name: Optional[str] = None
    date_of_birth: Optional[date] = None
    date_of_death: Optional[date] = None
    gender: Optional[str] = None
    is_veteran: bool
    visibility_config: str
    status: str = "active"
    plot_id: Optional[UUID] = None
    plot_ref: Optional[str] = None
    section_code: Optional[str] = None
    date_interred: Optional[date] = None
    created_at: datetime
    updated_at: datetime

    model_config = {"from_attributes": True}


class RecordResponse(RecordSummaryResponse):
    nationality: Optional[str] = None
    religion: Optional[str] = None
    military_branch: Optional[str] = None
    photo_url: Optional[str] = None
    biography_draft: Optional[str] = None
    burial_info: Optional[BurialInfoResponse] = None
    family_contacts: List[FamilyContactResponse] = []
