from __future__ import annotations

from typing import Any

from pydantic import BaseModel, Field, field_validator


class SearchRequest(BaseModel):
    """Project-scoped search over indexed text fields and record title/slug."""

    query: str = Field(min_length=1, max_length=200)
    entity_key: str | None = Field(default=None, min_length=1, max_length=120)
    entity_keys: list[str] = Field(default_factory=list, max_length=10)
    status: str = Field(default="active", min_length=1, max_length=32)
    limit: int = Field(default=20, ge=1, le=100)

    @field_validator("query")
    @classmethod
    def normalize_query(cls, value: str) -> str:
        return " ".join(value.split())

    @field_validator("entity_keys")
    @classmethod
    def normalize_entity_keys(cls, value: list[str]) -> list[str]:
        return list(dict.fromkeys(item.strip() for item in value if item.strip()))[:10]


class SearchResult(BaseModel):
    id: str
    entity_key: str
    title: str | None = None
    slug: str | None = None
    data: dict[str, Any] = Field(default_factory=dict)
    updated_at: str
    score: float = 1.0
