"""會議相關 Pydantic schema(階段 4)。"""

from datetime import datetime
from uuid import UUID

from pydantic import BaseModel, ConfigDict


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

    speaker_label: str
    speaker_user_id: UUID | None = None
    start_time: float
    end_time: float
    content: str


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

    id: UUID
    description: str
    suggested_assignee_id: UUID | None = None
    suggested_due_date: str | None = None
    converted_task_id: UUID | None = None


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

    id: UUID
    decision: str
    context: str | None = None


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

    executive_summary: str
    key_topics: list[str] | None = None


class MeetingPublic(BaseModel):
    """會議基本資料(列表 / 詳情共用)。"""

    model_config = ConfigDict(from_attributes=True)

    id: UUID
    title: str
    status: str
    error_message: str | None = None
    audio_size_bytes: int | None = None
    audio_duration_seconds: float | None = None
    created_at: datetime
    updated_at: datetime


class MeetingDetail(MeetingPublic):
    """詳情頁 — 含逐字稿 + 摘要 + 決策 + 待辦。"""

    summary: MeetingSummaryPublic | None = None
    transcripts: list[MeetingTranscriptSegment] = []
    decisions: list[MeetingDecisionPublic] = []
    action_items: list[MeetingActionItemPublic] = []
