"""Scheduling response schemas."""
from datetime import date, datetime, time
from typing import List, Optional
from uuid import UUID

from pydantic import BaseModel, ConfigDict


class StaffAssignmentItem(BaseModel):
    model_config = ConfigDict(from_attributes=True)

    user_id: UUID
    role: Optional[str] = None


class ServiceDetail(BaseModel):
    model_config = ConfigDict(from_attributes=True)

    id: UUID
    tenant_id: UUID
    service_type: str
    record_id: Optional[UUID] = None
    plot_id: Optional[UUID] = None
    section_id: Optional[UUID] = None
    scheduled_date: Optional[date] = None
    scheduled_time: Optional[time] = None
    duration_minutes: Optional[int] = None
    officiant: Optional[str] = None
    family_contact_name: Optional[str] = None
    family_contact_phone: Optional[str] = None
    expected_attendees: Optional[int] = None
    equipment_needed: Optional[str] = None
    notes: Optional[str] = None
    status: str
    email_family: bool = False
    add_to_briefing: bool = False
    reminder_24h: bool = False
    reminder_sent: bool = False
    pdf_s3_key: Optional[str] = None
    created_by: Optional[UUID] = None
    deleted_at: Optional[datetime] = None
    created_at: datetime
    updated_at: datetime
    staff_assignments: List[StaffAssignmentItem] = []


class ServiceListItem(BaseModel):
    model_config = ConfigDict(from_attributes=True)

    id: UUID
    tenant_id: UUID
    service_type: str
    record_id: Optional[UUID] = None
    plot_id: Optional[UUID] = None
    section_id: Optional[UUID] = None
    scheduled_date: Optional[date] = None
    scheduled_time: Optional[time] = None
    duration_minutes: Optional[int] = None
    officiant: Optional[str] = None
    family_contact_name: Optional[str] = None
    status: str
    created_at: datetime
    updated_at: datetime


class WeekSummaryItem(BaseModel):
    model_config = ConfigDict(from_attributes=True)

    id: UUID
    service_type: str
    scheduled_date: Optional[date] = None
    scheduled_time: Optional[time] = None
    family_contact_name: Optional[str] = None
    plot_id: Optional[UUID] = None
    officiant: Optional[str] = None
    status: str
    crew_names: List[str] = []
