import uuid
from datetime import datetime
from typing import Any

from pydantic import AliasChoices, BaseModel, ConfigDict, Field

from api.schemas.compat import OptionalWorkplanIdCompatMixin


class ProgressEventCreate(BaseModel):
    topic_id: uuid.UUID | None = None
    workplan_id: uuid.UUID | None = Field(
        default=None,
        validation_alias=AliasChoices("workplan_id", "workstream_id"),
    )
    task_id: uuid.UUID | None = None
    decision_id: uuid.UUID | None = None
    event_type: str
    summary: str
    detail: dict[str, Any] | None = None
    author: str | None = None
    session_id: str | None = None


class ProgressEventRead(OptionalWorkplanIdCompatMixin, BaseModel):
    model_config = ConfigDict(from_attributes=True)
    id: uuid.UUID
    topic_id: uuid.UUID | None = None
    task_id: uuid.UUID | None = None
    decision_id: uuid.UUID | None = None
    event_type: str
    summary: str
    detail: dict[str, Any] | None = None
    author: str | None = None
    session_id: str | None = None
    created_at: datetime