import { create } from "zustand";
import { RepositoryRemote } from "../services";
import { alerts } from "../utils/alerts";

export const useProductStore = create((set) => ({
  products: [],
  productsData: {},
  productsList: [],
  favoritesProduct: [],
  purchasedProducts: [],
  loading: false,
  similarList: [],
  similarLoading: false,
  getAllProduct: async (onSuccess, onFail) => {
    try {
      set({ loading: true });
      const response = await RepositoryRemote.product.getAllProduct();
      set ({productsData: response.data.data})
      set ({productsList: response.data.data.data})
      onSuccess(response);
    } catch (error) {
      onFail(error);
    }
    set({ loading: false });
  },

  apiProduct: async (product, onSuccess, onFail) => {
    try {
      set({ loading: true });
      const response = await RepositoryRemote.product.apiProduct(product);
      set ({productsData: response.data.data})
      onSuccess(response);
    } catch (error) {
      onFail(error);
    }
    set({ loading: false });
  },

  similarProducts: async (product, onSuccess, onFail) => {
    try {
      set({ similarLoading: true });
      const response = await RepositoryRemote.product.similarProducts(product);
      set ({similarList: response.data.data})
      onSuccess(response);
    } catch (error) {
      onFail(error)
    }
    set({ similarLoading: false });
  },

  productByCategory: async (category, onSuccess, onFail) => {
    try {
      set({ loading: true });
      const response = await RepositoryRemote.product.productByCategory(category);
      set ({productsList: response.data.data.data})
      onSuccess(response);
    } catch (error) {
      onFail(error)
    }
    set({ loading: false });
  },

  searchByName: async (search, onSuccess, onFail) => {
    try {
      set({ loading: true });
      const response = await RepositoryRemote.product.searchByName(search);
      console.log(response);
      set ({productsList: response.data.data.data})
      onSuccess(response);
    } catch (error) {
      onFail(error)
    }
    set({ loading: false });
  },

  productsNew: async (onSuccess, onFail) => {
    try {
      set({ loading: true });
      const response = await RepositoryRemote.product.productsNew();
      set ({productsList: response.data.data})
      onSuccess(response);
    } catch (error) {
      onFail(error)
    }
    set({ loading: false });
  },

  productsTopSale: async (onSuccess, onFail) => {
    try {
      set({ loading: true });
      const response = await RepositoryRemote.product.productsTopSale();
      set ({productsList: response.data.data})
      onSuccess(response);
    } catch (error) {
      onFail(error)
    }
    set({ loading: false });
  },

  productFavorite: async (product, form, onSuccess, onFail) => {
    try {
      // set({ loading: true });
      const response = await RepositoryRemote.product.productFavorite(product, form);
      set ({productsData: response.data.data})
      onSuccess(response);
    } catch (error) {
      onFail(error)
    }
    // set({ loading: false });
  },

  favorites: async (onSuccess, onFail) => {
    try {
      set({ loading: true });
      const response = await RepositoryRemote.product.favorites();
      set ({favoritesProduct: response.data.data.data})
      onSuccess(response);
    } catch (error) {
      onFail(error)
    }
    set({ loading: false });
  },  

  getPurchasedProducts: async (onSuccess, onFail) => {
    try {
      set({ loading: true });
      const response = await RepositoryRemote.product.getPurchasedProducts();
      set ({purchasedProducts: response.data.data.data})
      onSuccess(response);
    } catch (error) {
      onFail(error)
    }
    set({ loading: false });
  },
}));
