import { toast } from "sonner";
import { create } from "zustand";
import { createFacturaAutomatico, getFacturas } from "../api/facturas.service";
import { useClientesProveedoresStore } from "./ClientesProveedoresStore";

const initialState = {
  items: [],
  total: 0,
  statePantallaCobro: false,
  tipocobro: "",
  stateMetodosPago: false,
  idventa: 0,
};

export const useVentasStore = create((set, get) => ({
  ...initialState,
  porcentajeCambio: 0,
  dataventas: [],

  resetState: () => {
    const { selectCliPro } = useClientesProveedoresStore.getState();
    selectCliPro([]);
    set(initialState);
  },

  setStatePantallaCobro: (p) =>
    set((state) => {
      if (p.data.length === 0) {
        toast.warning("Agrega productos, no seas puerco");
        return { state };
      } else {
        return {
          statePantallaCobro: !state.statePantallaCobro,
          tipocobro: p.tipocobro,
        };
      }
    }),

  setStateMetodosPago: () =>
    set((state) => ({ stateMetodosPago: !state.stateMetodosPago })),

  insertarVentas: async (p) => {
    try {
      const result = await createFacturaAutomatico(p);
      set({ idventa: result?.data?.id || result?.id });
      return result?.data || result;
    } catch (error) {
      console.error("Error al insertar venta:", error);
      throw error;
    }
  },

  eliminarventasIncompletas: async (p) => {
    // TODO: Implementar endpoint para eliminar ventas incompletas
    console.log("eliminarventasIncompletas - pendiente de migración", p);
  },

  eliminarVenta: async (p) => {
    const { resetState } = get();
    // TODO: Implementar endpoint para eliminar venta
    console.log("eliminarVenta - pendiente de migración", p);
    resetState();
  },

  mostrarventasxsucursal: async (p) => {
    try {
      const response = await getFacturas(p.page || 1, p.limit || 50);
      const data = response?.data || response || [];
      set({ dataventas: data });
      set({ idventa: data[0]?.id || 0 });
      return data;
    } catch (error) {
      console.error("Error al obtener ventas:", error);
      set({ dataventas: [] });
      return [];
    }
  },

  confirmarVenta: async (p) => {
    try {
      const result = await createFacturaAutomatico(p);
      return result?.data || result;
    } catch (error) {
      console.error("Error al confirmar venta:", error);
      throw error;
    }
  },
}));
