from typing import Any, Dict, List, Optional

from pydantic import BaseModel


class CardModel(BaseModel):
    id: str
    title: str
    details: str


class ColumnModel(BaseModel):
    id: str
    title: str
    cardIds: List[str]


class BoardModel(BaseModel):
    columns: List[ColumnModel]
    cards: Dict[str, CardModel]


class LoginRequest(BaseModel):
    username: str
    password: str


class LoginResponse(BaseModel):
    token: str


class KanbanBoardPayload(BaseModel):
    board: BoardModel


class AIRequest(BaseModel):
    prompt: str


class AIBoardRequest(BaseModel):
    board: BoardModel
    prompt: str


class AIResponse(BaseModel):
    prompt: str
    answer: str
    model: str
    success: bool
    error: Optional[str] = None


class AIBoardResponse(BaseModel):
    prompt: str
    answer: str
    model: str
    success: bool
    updated: bool = False
    board: Optional[Dict[str, Any]] = None
    error: Optional[str] = None


class BoardMeta(BaseModel):
    id: int
    name: str


class CreateBoardRequest(BaseModel):
    name: str
