import axios from 'axios'
import store from '@/store/store.js'
import router from '@/router/index.js'

const instance = axios.create({
  headers: { 'Authorization': "Bearer " + localStorage.getItem('stored_token') },
  baseURL: 'https://canap-gest.epfl.ch:8443/api'
})

instance.interceptors.response.use(function (response) {
  return response
}, function (error) {
  if (!error.response) {
    store.commit('moduleSnackbar/toggle', { open: true, message: 'API non atteignable', type: 'warning' }, { root: true })
  } else if (error.response.status == 400 || error.response.status == 401) {
    // Erreur de token
    if (error.response.data.type === 'expired') {
      // Session expirée
      // store.commit('moduleSnackbar/toggle', { open: true, message: error.response.data.error, type: 'warning' }, { root: true })
      store.dispatch('moduleUser/logout', false)
    }
  } else if (error.response.status == 403 || error.response.status == 404) {
    router.push({ name: 'error', params: { status: error.response.data.error, message: error.response.data.message, route: '' } })
  } else {
    // Affichage des erreurs (snackbar)
    Object.values(error.response.data).forEach(errMsg => {
      store.commit('moduleSnackbar/toggle', { open: true, message: errMsg[0], type: 'error' }, { root: true })
    })
  }
  return Promise.reject(error)
})

export default instance