import { REST } from 'vuejs/api/rest-axios'

import { MGQ } from 'vuejs/api/graphql-axios'
import { print } from 'graphql/language/printer'
import gql from 'graphql-tag'
import productsGQL from 'vuejs/api/gql/products.fragment.gql'

export default {
  namespaced: true,

  // initial state
  state: {
    products_ids: [],
    products: []
  },

  // getters
  getters: {},

  // mutations
  mutations: {
    setProductsIds (state, ids) {
      state.products_ids = ids
    },
    setProducts (state, p) {
      state.products = p
    }
  },

  // actions
  actions: {
    getProducts ({ dispatch, commit, state }) {
      dispatch('loadProductsIds')
    },
    loadProductsIds ({ dispatch, commit, state }) {
      REST.get('/pricing_rest?_format=json', {})
        .then(({ data }) => {
          console.log('getProducts REST: data', data)
          const ids = []
          for (let i = 0; i < data.length; i++) {
            ids.push(data[i].product_id)
          }
          commit('setProductsIds', ids)
          dispatch('loadProducts')
        })
        .catch((error) => {
          console.warn('Issue with pricing', error)
          Promise.reject(error)
        })
    },
    loadProducts ({ dispatch, commit, state }) {
      const ast = gql`{
        products(ids: [${state.products_ids}], lang: "${drupalDecoupled.lang_code}") {
          ...ProductsFields
        }
      }
      ${productsGQL}
      `
      MGQ.post('', { query: print(ast) })
        .then((resp) => {
          console.log('loadProductsGQL resp', resp)
          commit('setProducts', resp.data.data.products)
        })
        .catch(error => {
          console.warn('Issue with loadProducts', error)
          Promise.reject(error)
        })
    }

  }
}
