"""AI Copilot schemas — query, execute, history."""

from __future__ import annotations

from pydantic import BaseModel, Field


class CopilotQueryRequest(BaseModel):
    """Natural language query to the AI copilot."""

    query: str = Field(..., min_length=1, max_length=2000)
    conversation_id: str | None = None
    context: dict = Field(default_factory=dict)


class CopilotAction(BaseModel):
    """A proposed API action derived from NL input."""

    method: str = Field(..., pattern="^(GET|POST|PATCH|DELETE)$")
    path: str = Field(..., min_length=1)
    body: dict | None = None
    description: str = ""
    confidence: float = Field(0.0, ge=0.0, le=1.0)


class CopilotQueryResponse(BaseModel):
    """Response from copilot query — proposed actions for user confirmation."""

    conversation_id: str
    message: str
    proposed_actions: list[CopilotAction] = Field(default_factory=list)


class CopilotExecuteRequest(BaseModel):
    """Execute a proposed action after user confirmation."""

    conversation_id: str
    action: CopilotAction


class CopilotExecuteResponse(BaseModel):
    """Result of executing a proposed action."""

    conversation_id: str
    success: bool
    status_code: int
    data: dict | list | None = None
    error: str | None = None


class CopilotMessageResponse(BaseModel):
    """A single message in conversation history."""

    id: str
    role: str
    content: str
    proposed_actions: list[dict] | None = None
    executed_action: dict | None = None
    execution_result: dict | None = None
    created_at: str | None = None


class CopilotHistoryResponse(BaseModel):
    """Paginated conversation history."""

    items: list[CopilotMessageResponse]
    total: int
    page: int
    page_size: int
