"""Pydantic schemas for the Unified Search plugin."""

from __future__ import annotations

from typing import Any

from pydantic import BaseModel, Field


# ─── Search ───

class SearchRequest(BaseModel):
    query: str = Field(..., min_length=1, max_length=500)
    entity_types: list[str] | None = None
    limit: int = Field(default=20, ge=1, le=100)
    offset: int = Field(default=0, ge=0)


class SearchResult(BaseModel):
    entity_type: str
    entity_id: str
    title: str
    snippet: str
    score: float
    data: dict[str, Any] = Field(default_factory=dict)


class SearchResponse(BaseModel):
    query: str
    normalized_query: str
    results: list[SearchResult]
    facets: dict[str, Any]
    summary: str
    suggestions: list[str]


# ─── Similar ───

class SimilarRequest(BaseModel):
    entity_type: str
    entity_id: str
    limit: int = Field(default=5, ge=1, le=50)


class SimilarResponse(BaseModel):
    similar: dict[str, list[SearchResult]]


# ─── Suggest ───

class SuggestRequest(BaseModel):
    q: str = Field(..., min_length=1, max_length=200)
    limit: int = Field(default=10, ge=1, le=50)


class SuggestResponse(BaseModel):
    suggestions: list[str]


# ─── Reindex ───

class ReindexRequest(BaseModel):
    entity_types: list[str] = Field(default_factory=list)


# ─── Provider ───

class ProviderResponse(BaseModel):
    entity_type: str
    plugin_name: str
    is_active: bool
