from datetime import datetime
from typing import Any, Optional

from pydantic import BaseModel, ConfigDict, Field


class ConversationCreate(BaseModel):
    product_id: str
    device_id: Optional[str] = None


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

    role: str
    text: str
    audio_url: Optional[str] = None
    created_at: Optional[datetime] = None


class ConversationOut(BaseModel):
    model_config = ConfigDict(from_attributes=True, populate_by_name=True)

    conversation_id: str = Field(validation_alias="id")
    product_id: str
    character_id: str
    status: str
    messages: list[MessageOut] = Field(default_factory=list)


class AudioConversationResponse(BaseModel):
    conversation_id: str
    user_text: str
    assistant_text: str
    audio_url: str
    character_state: str = "talking"
    latency: dict[str, Any] = Field(default_factory=dict)
