import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import type { PurchaseOrderCreate } from '@siop/shared';
import { api, unwrap } from './client';

/** Hooks R6.3 — Ressources (Stock, Tiers, Fichiers) : mêmes opérations que
 *  le web (gestion.ts), périmètre mobile plus étroit (D4 — consultation +
 *  action courante « commander », pas les flux de gestion les plus denses :
 *  pas de création/édition de pièce ou de tiers sur mobile pour l'instant). */

export function usePartners() {
  return useQuery({
    queryKey: ['partners'],
    queryFn: async () => (await unwrap(await api.GET('/partners'))).partners,
  });
}

export function useParts() {
  return useQuery({
    queryKey: ['parts'],
    queryFn: async () => (await unwrap(await api.GET('/parts'))).parts,
  });
}

export function usePart(id: string) {
  return useQuery({
    queryKey: ['parts', id],
    queryFn: async () => unwrap(await api.GET('/parts/{id}', { params: { path: { id } } })),
  });
}

export function useCreatePurchaseOrder() {
  const queryClient = useQueryClient();
  return useMutation({
    mutationFn: async (body: PurchaseOrderCreate) =>
      unwrap(await api.POST('/purchase-orders', { body })),
    onSuccess: () => queryClient.invalidateQueries({ queryKey: ['purchase-orders'] }),
  });
}

/** Bibliothèque complète (sans filtre appareil/OT — voir aussi
 *  `useDocumentsOT` dans exploitation.ts, scopée à un OT). */
export function useDocuments() {
  return useQuery({
    queryKey: ['documents'],
    queryFn: async () => (await unwrap(await api.GET('/documents'))).documents,
  });
}
