"""Generic participant-authorized conversations around platform records."""
from __future__ import annotations

from datetime import datetime

from pydantic import BaseModel, ConfigDict, Field


class Conversation(BaseModel):
    model_config = ConfigDict(extra="forbid", strict=True)

    subject_entity_key: str = Field(pattern=r"^[a-z][a-z0-9_]{0,62}$")
    subject_record_id: str = Field(min_length=1, max_length=200)
    title: str | None = Field(default=None, max_length=200)
    visibility: str = Field(default="participants", pattern=r"^[a-z][a-z0-9_]{0,31}$")


class ConversationParticipant(BaseModel):
    model_config = ConfigDict(extra="forbid", strict=True)

    conversation_id: str = Field(min_length=1, max_length=200)
    user_id: str = Field(min_length=1, max_length=200)
    role: str = Field(default="participant", pattern=r"^[a-z][a-z0-9_]{0,31}$")
    joined_at: datetime
    left_at: datetime | None = None
    read_at: datetime | None = None


class Message(BaseModel):
    model_config = ConfigDict(extra="forbid", strict=True)

    conversation_id: str = Field(min_length=1, max_length=200)
    author_user_id: str = Field(min_length=1, max_length=200)
    body: str = Field(min_length=1, max_length=100_000)
    created_at: datetime
    edited_at: datetime | None = None
    attachment_ids: list[str] = Field(default_factory=list)
