from __future__ import annotations

from typing import Literal

from fastapi import APIRouter, Query
from pydantic import EmailStr

from app.services import search as search_service

router = APIRouter(prefix="/search", tags=["search"])


@router.get("", response_model=search_service.SearchResponse)
def search(
    q: str = Query("", min_length=0, max_length=200),
    platform: Literal["firm", "client"] = Query(...),
    email: EmailStr = Query(...),
    client_id: str | None = None,
    category: Literal["all", "clients", "documents", "suppliers", "questions", "activity"] = "all",
    limit: int = Query(40, ge=1, le=100),
    mode: Literal["autocomplete", "full"] = "autocomplete",
):
    """
    Role-aware search over ledger data.
    Authorization is enforced server-side via platform + client_id resolution.
    """
    email_n = str(email).lower()
    if mode == "autocomplete":
        return search_service.autocomplete(
            query=q,
            platform=platform,
            email=email_n,
            client_id=client_id,
            limit=min(limit, 16),
        )
    return search_service.search(
        query=q,
        platform=platform,
        email=email_n,
        client_id=client_id,
        category=category,
        limit=limit,
        per_category=20,
    )
