import { cloneDeep } from 'lodash';
import { api } from 'src/boot/axios';
import { ActionTree } from 'vuex';
import { run } from '../helpers';
import { ProductosState } from './ProductosState';
let cancelToken: any;

export const actions: ActionTree<ProductosState, unknown> = {
  create: async ({ state }, payload) => {
    state.loading = true;
    return run(api.post('productos', payload), 'Producto agregado correctamente', 'Error al guardar el producto').finally(() => (state.loading = false));
  },
  update: async ({ state, commit }, payload) => {
    state.loading = true;
    return run(api.put('productos/' + payload.ID_PRODUCTO, payload), 'Producto guardado correctamente', 'Error al guardar el producto')
      .then((data) => {
        if (data.ID_PRODUCTO === state.current?.ID_PRODUCTO) {
          commit('setCurrent', { ...cloneDeep(state.current), ...data });
        }
        return data;
      })
      .finally(() => (state.loading = false));
  },
  getOne: async ({ state, commit }, id) => {
    state.loading = true;
    run(api.get(`productos/${id}`))
      .then((data) => commit('setCurrent', data))
      .finally(() => (state.loading = false));
  },
  saveLocation: async ({ state }, { id, data }) => {
    state.loading = true;
    return run(api.put(`productos/${id}/location`, data), 'Ubicación guardada correctamente', 'Error al guardar la ubicación').finally(() => (state.loading = false));
  },
};
