from __future__ import annotations from datetime import datetime from enum import Enum from typing import ClassVar from uuid import UUID from pydantic import BaseModel, ConfigDict, Field class AttachmentType(str, Enum): DOCUMENT = "document" REMINDER = "reminder" class ScheduleItemMetadataAttachment(BaseModel): name: str type: AttachmentType visible_to: list[UUID] = Field(default_factory=list) url: str | None = None note: str | None = None content: str | None = None class ScheduleItemMetadata(BaseModel): color: str | None = None location: str | None = None notes: str | None = None attachments: list[ScheduleItemMetadataAttachment] = Field(default_factory=list) version: int = 1 class ScheduleItemStatus(str, Enum): ACTIVE = "active" COMPLETED = "completed" CANCELED = "canceled" ARCHIVED = "archived" class ScheduleItemSourceType(str, Enum): MANUAL = "manual" IMPORTED = "imported" AGENT_GENERATED = "agent_generated" class ScheduleItemCreateRequest(BaseModel): model_config: ClassVar[ConfigDict] = ConfigDict(extra="forbid") title: str = Field(min_length=1, max_length=255) description: str | None = Field(default=None, max_length=2000) start_at: datetime end_at: datetime | None = None timezone: str = Field(default="UTC", max_length=50) metadata: ScheduleItemMetadata | None = None class ScheduleItemUpdateRequest(BaseModel): model_config: ClassVar[ConfigDict] = ConfigDict(extra="forbid") title: str | None = Field(default=None, min_length=1, max_length=255) description: str | None = Field(default=None, max_length=2000) start_at: datetime | None = None end_at: datetime | None = None timezone: str | None = Field(default=None, max_length=50) metadata: ScheduleItemMetadata | None = None status: ScheduleItemStatus | None = None class ScheduleItemResponse(BaseModel): model_config: ClassVar[ConfigDict] = ConfigDict(from_attributes=True) id: UUID title: str description: str | None = None start_at: datetime end_at: datetime | None = None timezone: str metadata: ScheduleItemMetadata | None = None status: ScheduleItemStatus source_type: ScheduleItemSourceType created_at: datetime updated_at: datetime class ScheduleItemListItem(BaseModel): model_config: ClassVar[ConfigDict] = ConfigDict(from_attributes=True) id: UUID title: str start_at: datetime end_at: datetime | None = None timezone: str status: ScheduleItemStatus class ScheduleItemListRequest(BaseModel): start_at: datetime end_at: datetime