import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { apiGet, apiPost, apiPut, apiDelete } from "../lib/api"; interface SetupListItem { id: number; name: string; createdAt: string; updatedAt: string; itemCount: number; totalWeight: number; totalCost: number; } interface SetupItemWithCategory { id: number; name: string; weightGrams: number | null; priceCents: number | null; categoryId: number; notes: string | null; productUrl: string | null; imageFilename: string | null; createdAt: string; updatedAt: string; categoryName: string; categoryIcon: string; } interface SetupWithItems { id: number; name: string; createdAt: string; updatedAt: string; items: SetupItemWithCategory[]; } export type { SetupListItem, SetupWithItems, SetupItemWithCategory }; export function useSetups() { return useQuery({ queryKey: ["setups"], queryFn: () => apiGet("/api/setups"), }); } export function useSetup(setupId: number | null) { return useQuery({ queryKey: ["setups", setupId], queryFn: () => apiGet(`/api/setups/${setupId}`), enabled: setupId != null, }); } export function useCreateSetup() { const queryClient = useQueryClient(); return useMutation({ mutationFn: (data: { name: string }) => apiPost("/api/setups", data), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["setups"] }); }, }); } export function useUpdateSetup(setupId: number) { const queryClient = useQueryClient(); return useMutation({ mutationFn: (data: { name?: string }) => apiPut(`/api/setups/${setupId}`, data), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["setups"] }); }, }); } export function useDeleteSetup() { const queryClient = useQueryClient(); return useMutation({ mutationFn: (id: number) => apiDelete<{ success: boolean }>(`/api/setups/${id}`), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["setups"] }); }, }); } export function useSyncSetupItems(setupId: number) { const queryClient = useQueryClient(); return useMutation({ mutationFn: (itemIds: number[]) => apiPut<{ success: boolean }>(`/api/setups/${setupId}/items`, { itemIds }), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["setups"] }); }, }); } export function useRemoveSetupItem(setupId: number) { const queryClient = useQueryClient(); return useMutation({ mutationFn: (itemId: number) => apiDelete<{ success: boolean }>(`/api/setups/${setupId}/items/${itemId}`), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["setups"] }); }, }); }