"""Schemas for the enquiry workflow in site admin."""
from datetime import datetime
from typing import Literal, Optional
from uuid import UUID

from pydantic import BaseModel, ConfigDict


class EnquiryAuditLogResponse(BaseModel):
    model_config = ConfigDict(from_attributes=True)
    id: UUID
    from_status: str
    to_status: str
    trigger_source: str
    actor_email: Optional[str] = None
    notes: Optional[str] = None
    created_at: datetime


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

    id: UUID
    type: str
    name: str
    email: str
    organization: Optional[str] = None
    role: Optional[str] = None
    phone: Optional[str] = None
    cemetery_type: Optional[str] = None
    day: Optional[str] = None
    time: Optional[str] = None
    message: Optional[str] = None
    status: str
    source: str
    contact_method: Optional[str] = None
    contacted_at: Optional[datetime] = None
    qualified_at: Optional[datetime] = None
    qualified_email_sent_at: Optional[datetime] = None
    signup_completed_at: Optional[datetime] = None
    auto_closed_at: Optional[datetime] = None
    created_at: datetime


class EnquiryDetailResponse(EnquiryListItemResponse):
    audit_logs: list[EnquiryAuditLogResponse] = []


class CreateEnquiryRequest(BaseModel):
    name: str
    email: str
    type: Literal["contact", "call"] = "contact"
    organization: Optional[str] = None
    role: Optional[str] = None
    phone: Optional[str] = None
    cemetery_type: Optional[str] = None
    message: Optional[str] = None
    day: Optional[str] = None
    time: Optional[str] = None


class SendContactReplyRequest(BaseModel):
    message: str


class RecordSignupCompletedRequest(BaseModel):
    enquiry_id: UUID
