import { create } from "zustand";
import {
  createDeposito,
  deleteDeposito,
  getDepositos,
  updateDeposito,
} from "../api/depositos.service";

export const useAlmacenesStore = create((set) => ({
  stateAlmacen: false,
  setStateAlmacen: (p) => set({ stateAlmacen: p }),
  accion: "",
  setAccion: (p) => set({ accion: p }),
  almacenSelectItem: [],
  setAlmacenSelectItem: (p) => {
    set({ almacenSelectItem: p });
  },

  dataalmacen: [],
  dataalmacenxsucursalxproducto: [],

  mostrarAlmacenXsucursal: async (p) => {
    try {
      const response = await getDepositos(p.id_sucursal || p.sucursal_id);
      set({ dataalmacenxsucursalxproducto: response || [] });
      return response || [];
    } catch (error) {
      console.error("Error al obtener almacén:", error);
      set({ dataalmacenxsucursalxproducto: [] });
      return [];
    }
  },

  dataAlmacenesXempresa: null,
  mostrarAlmacenesXEmpresa: async () => {
    try {
      const response = await getDepositos();
      set({ dataAlmacenesXsucursal: response || [] });
      return response || [];
    } catch (error) {
      console.error("Error al obtener almacenes:", error);
      set({ dataAlmacenesXsucursal: [] });
      return [];
    }
  },

  dataAlmacenesXsucursal: null,
  mostrarAlmacenesXSucursal: async (p) => {
    try {
      const response = await getDepositos(p.id_sucursal || p.sucursal_id);
      const data = response || [];
      set({ almacenSelectItem: data[0] || null });
      set({ dataAlmacenesXsucursal: data });
      return data;
    } catch (error) {
      console.error("Error al obtener almacenes por sucursal:", error);
      set({ dataAlmacenesXsucursal: [] });
      return [];
    }
  },

  insertarAlmacen: async (p) => {
    try {
      await createDeposito({
        sucursal_id: p.id_sucursal || p.sucursal_id,
        descripcion: p.descripcion,
        codigo: p.codigo,
        tipo: p.tipo || "fisico",
        es_principal: p.es_principal || false,
      });
    } catch (error) {
      console.error("Error al insertar almacén:", error);
      throw error;
    }
  },

  eliminarAlmacen: async (p) => {
    try {
      await deleteDeposito(p.id);
    } catch (error) {
      console.error("Error al eliminar almacén:", error);
      throw error;
    }
  },

  editarAlmacen: async (p) => {
    try {
      await updateDeposito(p.id, {
        descripcion: p.descripcion,
        codigo: p.codigo,
        tipo: p.tipo,
        es_principal: p.es_principal,
      });
    } catch (error) {
      console.error("Error al editar almacén:", error);
      throw error;
    }
  },
}));
