import uuid
from datetime import datetime
from typing import Literal

from pydantic import BaseModel


class CreateConversationRequest(BaseModel):
    project_id: uuid.UUID
    model_name: str
    prompt_id: uuid.UUID | None = None
    system_prompt_override: str | None = None
    title: str | None = None


class SendMessageRequest(BaseModel):
    content: str
    use_rag: bool = False


class FeedbackRequest(BaseModel):
    rating: Literal["up", "down"]
    message_index: int | None = None
    notes: str | None = None


class PromoteRequest(BaseModel):
    dataset_id: uuid.UUID
    message_index: int


class ConversationOut(BaseModel):
    id: uuid.UUID
    project_id: uuid.UUID
    model_name: str | None
    title: str | None
    messages: list[dict]
    feedback: dict | None
    created_at: datetime
    updated_at: datetime

    class Config:
        from_attributes = True
