import { useMutation, UseMutationOptions } from "@tanstack/react-query";
import instance from "@/instance/instance";
import { toast } from "sonner";
import { ApiResponse, UpdateDataParams } from "@/instance/instance.type";

const useUpdateData = <TPayload = unknown, TData = unknown>({
  url,
  mutationOptions = {},
}: {
  url: string;
  mutationOptions?: UseMutationOptions<
    TData,
    Error,
    UpdateDataParams<TPayload>
  >;
}) => {
  return useMutation<TData, Error, UpdateDataParams<TPayload>>({
    mutationFn: async ({ id, payload, headers }) => {
      const finalHeaders: Record<string, string> = {
        ...headers,
      };
      const finalPayload = payload;
      const response = await instance.patch<ApiResponse<TData>>(
        `${url}${String(id)}`,
        finalPayload,
        {
          headers: finalHeaders,
        }
      );
      if (!response.data?.error) {
        toast.success(response.data?.message || "Updated successfully.");
        return response.data?.data as TData;
      }
      throw new Error(response.data?.message || "Failed to update resource.");
    },
    ...mutationOptions,
    retry: false,
  });
};

export default useUpdateData;
