import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
import { toast } from "sonner";
import {
    createMarca,
    deleteMarca,
    getMarcas,
    toggleMarca,
    updateMarca,
} from "../api/marcas.service";

export const useMarcasQuery = () => {
  return useQuery({
    queryKey: ["marcas"],
    queryFn: getMarcas,
    staleTime: 1000 * 60 * 5, // 5 minutos
  });
};

export const useCreateMarcaMutation = () => {
  const queryClient = useQueryClient();

  return useMutation({
    mutationFn: createMarca,
    onSuccess: () => {
      toast.success("Marca creada correctamente");
      queryClient.invalidateQueries({ queryKey: ["marcas"] });
    },
    onError: (error) => {
      toast.error(error?.response?.data?.message || "Error al crear marca");
    },
  });
};

export const useUpdateMarcaMutation = () => {
  const queryClient = useQueryClient();

  return useMutation({
    mutationFn: ({ id, data }) => updateMarca(id, data),
    onSuccess: () => {
      toast.success("Marca actualizada correctamente");
      queryClient.invalidateQueries({ queryKey: ["marcas"] });
    },
    onError: (error) => {
      toast.error(
        error?.response?.data?.message || "Error al actualizar marca",
      );
    },
  });
};

export const useToggleMarcaMutation = () => {
  const queryClient = useQueryClient();

  return useMutation({
    mutationFn: toggleMarca,
    onSuccess: () => {
      toast.success("Estado de marca actualizado");
      queryClient.invalidateQueries({ queryKey: ["marcas"] });
    },
    onError: (error) => {
      toast.error(error?.response?.data?.message || "Error al cambiar estado");
    },
  });
};

export const useDeleteMarcaMutation = () => {
  const queryClient = useQueryClient();

  return useMutation({
    mutationFn: deleteMarca,
    onSuccess: () => {
      toast.success("Marca eliminada correctamente");
      queryClient.invalidateQueries({ queryKey: ["marcas"] });
    },
    onError: (error) => {
      toast.error(error?.response?.data?.message || "Error al eliminar marca");
    },
  });
};
