from typing import Optional, List
from pydantic import BaseModel, EmailStr, Field


class TimelineEventRequest(BaseModel):
    year: int = Field(..., ge=1700, le=2100)
    title: str = Field(..., max_length=255)
    description: Optional[str] = Field(None, max_length=500)


class CreateMemorialRequest(BaseModel):
    display_name: Optional[str] = None
    headstone_inscription: Optional[str] = None
    biography_text: Optional[str] = None
    video_url: Optional[str] = None
    visibility_config: Optional[dict] = None
    is_published: bool = False
    timeline_events: Optional[List[TimelineEventRequest]] = None


class UpdateMemorialRequest(BaseModel):
    display_name: Optional[str] = None
    headstone_inscription: Optional[str] = None
    biography_text: Optional[str] = None
    video_url: Optional[str] = None
    visibility_config: Optional[dict] = None
    is_published: Optional[bool] = None


class CreateTributeRequest(BaseModel):
    submitter_name: str
    submitter_email: Optional[str] = None
    relationship: Optional[str] = None
    message: str
    photo_url: Optional[str] = None


class UpdateTributeStatusRequest(BaseModel):
    status: str  # "approved" | "rejected"


class ReplaceTimelineRequest(BaseModel):
    events: List[TimelineEventRequest]
