import { useMutation, useQuery, useQueryClient, type UseQueryResult } from "@tanstack/react-query"; import { toast } from "react-toastify"; import { servicesApi } from "@/domain/services/api/services-api"; import type { CompletionDocTemplateOption, Service, ServiceInput, } from "@/domain/services/types/service"; import { queryKeys } from "@/infra/query-key/query-key"; export function useServices(isActive?: boolean): UseQueryResult { return useQuery({ queryKey: queryKeys.services.list(isActive), queryFn: () => servicesApi.getAll(isActive), staleTime: 60 * 1000, }); } export function useCompletionDocTemplates(): UseQueryResult { return useQuery({ queryKey: queryKeys.services.completionTemplates(), queryFn: servicesApi.getCompletionTemplates, staleTime: 5 * 60 * 1000, }); } export function useCreateService() { const queryClient = useQueryClient(); return useMutation({ mutationFn: (input: ServiceInput) => servicesApi.create(input), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: queryKeys.services.all }); toast.success("Service added"); }, onError: (error: Error) => toast.error(error.message || "Failed to add service"), }); } export function useUpdateService() { const queryClient = useQueryClient(); return useMutation({ mutationFn: ({ id, input }: { id: string | number; input: ServiceInput }) => servicesApi.update(id, input), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: queryKeys.services.all }); toast.success("Service updated"); }, onError: (error: Error) => toast.error(error.message || "Failed to update service"), }); } export function useDeactivateService() { const queryClient = useQueryClient(); return useMutation({ mutationFn: (id: string | number) => servicesApi.deactivate(id), onSuccess: () => { void queryClient.invalidateQueries({ queryKey: queryKeys.services.all }); toast.success("Service deactivated"); }, onError: (error: Error) => toast.error(error.message || "Failed to deactivate service"), }); }