import { useQuery } from '@tanstack/react-query';
import { SEARCH_MIN_CHARS } from '@siop/shared';
import { api } from './client';

async function unwrap<T>(res: { data?: T; error?: unknown; response: Response }): Promise<T> {
  if (res.data !== undefined) return res.data;
  throw new Error(`Recherche indisponible (${res.response.status})`);
}

/** Recherche globale de la topbar (⌘K). L'API filtre chaque famille par la
 *  matrice — le client n'a aucune logique de permission à porter. */
export function useGlobalSearch(q: string) {
  const terme = q.trim();
  return useQuery({
    queryKey: ['search', terme],
    enabled: terme.length >= SEARCH_MIN_CHARS,
    staleTime: 30_000,
    placeholderData: (precedent) => precedent, // pas de clignotement en tapant
    queryFn: async () =>
      unwrap(await api.GET('/search', { params: { query: { q: terme } } })),
  });
}
