import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
import { toast } from "sonner";
import {
    bulkToggleMediosPago,
    createCondicionPago,
    deleteCondicionPago,
    getCondicionesPago,
    getMediosPagoActivos,
    getMediosPagoEmpresa,
    toggleMedioPago,
    updateCondicionPago,
} from "../api/pagos.service";

// ==================== CONDICIONES DE PAGO ====================

export const useCondicionesPagoQuery = () => {
  return useQuery({
    queryKey: ["condiciones-pago"],
    queryFn: getCondicionesPago,
  });
};

export const useCreateCondicionPagoMutation = () => {
  const queryClient = useQueryClient();
  return useMutation({
    mutationFn: createCondicionPago,
    onSuccess: () => {
      queryClient.invalidateQueries({ queryKey: ["condiciones-pago"] });
      toast.success("Condición de pago creada exitosamente");
    },
    onError: (error) => {
      toast.error(
        error.response?.data?.message || "Error al crear condición de pago",
      );
    },
  });
};

export const useUpdateCondicionPagoMutation = () => {
  const queryClient = useQueryClient();
  return useMutation({
    mutationFn: updateCondicionPago,
    onSuccess: () => {
      queryClient.invalidateQueries({ queryKey: ["condiciones-pago"] });
      toast.success("Condición de pago actualizada");
    },
    onError: (error) => {
      toast.error(error.response?.data?.message || "Error al actualizar");
    },
  });
};

export const useDeleteCondicionPagoMutation = () => {
  const queryClient = useQueryClient();
  return useMutation({
    mutationFn: deleteCondicionPago,
    onSuccess: () => {
      queryClient.invalidateQueries({ queryKey: ["condiciones-pago"] });
      toast.success("Condición de pago eliminada");
    },
    onError: (error) => {
      toast.error(error.response?.data?.message || "Error al eliminar");
    },
  });
};

// ==================== MEDIOS DE PAGO ====================

export const useMediosPagoEmpresaQuery = () => {
  return useQuery({
    queryKey: ["medios-pago-empresa"],
    queryFn: getMediosPagoEmpresa,
  });
};

export const useMediosPagoActivosQuery = () => {
  return useQuery({
    queryKey: ["medios-pago-activos"],
    queryFn: getMediosPagoActivos,
  });
};

export const useToggleMedioPagoMutation = () => {
  const queryClient = useQueryClient();
  return useMutation({
    mutationFn: toggleMedioPago,
    onSuccess: () => {
      queryClient.invalidateQueries({ queryKey: ["medios-pago-empresa"] });
      queryClient.invalidateQueries({ queryKey: ["medios-pago-activos"] });
    },
    onError: (error) => {
      toast.error(
        error.response?.data?.message || "Error al actualizar medio de pago",
      );
    },
  });
};

export const useBulkToggleMediosPagoMutation = () => {
  const queryClient = useQueryClient();
  return useMutation({
    mutationFn: bulkToggleMediosPago,
    onSuccess: () => {
      queryClient.invalidateQueries({ queryKey: ["medios-pago-empresa"] });
      queryClient.invalidateQueries({ queryKey: ["medios-pago-activos"] });
      toast.success("Medios de pago actualizados");
    },
    onError: (error) => {
      toast.error(
        error.response?.data?.message || "Error al actualizar medios de pago",
      );
    },
  });
};
