from pydantic import BaseModel
from typing import Optional, List
from datetime import datetime


class ChatMessageBase(BaseModel):
    socket_id: Optional[str] = None
    session_id: str
    question: Optional[str] = None
    response: Optional[str] = None
    tokens_used: Optional[int] = 0
    ai_model_used: Optional[str] = None


class ChatMessageCreate(ChatMessageBase):
    pass


class ChatMessageResponse(ChatMessageBase):
    id: str
    created_at: datetime
    modified_at: datetime
    created_by: Optional[str] = None
    modified_by: Optional[str] = None

    class Config:
        orm_mode = True


class ChatSessionBase(BaseModel):
    session_id: str
    name: Optional[str] = None
    project_id: Optional[str] = None
    is_active: Optional[bool] = True


class ChatSessionCreate(ChatSessionBase):
    pass


class ChatSessionResponse(ChatSessionBase):
    id: int
    created_at: datetime
    modified_at: datetime
    created_by: Optional[str] = None
    modified_by: Optional[str] = None

    class Config:
        orm_mode = True


class UpdateChatSessionPayload(BaseModel):
    selected_files: Optional[List[str]] = None
    is_active: Optional[bool] = None
