import axios from 'axios'
import {
  CONFIG
} from './const.js'
import {
  userLogout
} from './util.js'
import {
  Message
} from 'element-ui'
import router from '../router'

// 封装接口请求，如果不是正常返回，均会用reject处理，并且会默认抛出message提示，如果需要自定义，可以在不同接口配置响应拦截器
const service = axios.create({
  baseURL: CONFIG.API_URL,
})

service.interceptors.request.use(
  config => {
    // 添加token
    const token = localStorage.getItem('electric_user_token');
    if (!config.noToken && token) config.headers['Authorization'] = token;
    return config
  },
  error => {
    console.log('request error:', error)
    return Promise.reject(error)
  }
)

service.interceptors.response.use(
  response => {
    // 如果设置了拦截器,执行,否则执行默认拦截器
    if (response.config.responseInterceptor) {
      return response.config.responseInterceptor(response);
    } else {
      const res = response.data
      // 后台返回的数据如果不是200,也抛出reject
      if (res.code !== 200) {
        Message({
          message: res.msg || 'Error',
          type: 'error',
        })
        return Promise.reject(new Error(res.msg || 'Error'))
      } else {
        return res.data
      }
    }
  },
  error => {
    console.log('response error:' + error)
    if (error && error.response) {
      // 处理响应状态
      switch (error.response.status) {
        case 401:
        	userLogout();
        	break
        default:
          Message({
            message: error.message,
            type: 'error',
          })
          break
      }
    }
    return Promise.reject(error)
  }
)

export default service
