import Vue from 'vue'
import axios from 'axios'
import store from '~store'

const service = axios.create({
  withCredentials: true,
  baseURL: '/'
})

service.interceptors.request.use(config => {
  // is server render, use ${baseUrl} directly rather than ${proxyUrl}
  if (typeof window === 'undefined') {
    config.url = process.env.baseUrl + config.url
    config.headers.cookie = store.state.option.cookies + '; ' + store.state.option.sessionId
    config.headers['User-Agent'] = store.state.option.userAgent
  }
  return config
}, error => {
  return Promise.reject(error)
})

service.interceptors.response.use(response => {
  const cookies = response.headers['set-cookie']
  if (cookies && cookies.length) {
    for (let i = 0; i < cookies.length; i++) {
      if (cookies[i].indexOf('JSESSIONID') > -1) {
        const sessionId = cookies[i]
        const first = sessionId.indexOf(';')
        const second = sessionId.lastIndexOf(';')
        const newSessionId = sessionId.replace(sessionId.substring(first, second), '')
        store.commit('option/SET_SESSION_ID', newSessionId)
        break
      }
    }
  }
  return response
}, error => {
  return Promise.reject(error)
})

Vue.prototype.$http = service
export default service
