import Axios from 'axios'
import { Message } from 'view-design'

import { getToken, setToken, getAdmin } from 'libs/token'

// 根路径
import baseURL from 'config/url'

const service = Axios.create({
  baseURL,
  // withCredentials: true, // 当跨域请求时发送cookie
  timeout: 100000
})

// 保存调用栈
// let time = null

// 设置请求拦截器，每个请求都会到这里
service.interceptors.request.use(
  config => {
    if (getToken()) {
      // 给每个请求都加上后台需要的信息，可以自定义
      config.params = Object.assign({
        token: getToken(),
        user_id: getAdmin().admin_id
      }, config.params || {})
    }
    
    // 在发送请求之前还能做点东西

    // 拦截器函数, 要求返回config参数
    return config
  }, error => {
    // 当报错的时候可以打印日志
    console.log(error)
    return Promise.reject(error)
  }
)

// 设置响应拦截器，每个响应都会到这里
service.interceptors.response.use(
  response => {
    // 当获得响应数据，可以根据响应的状态码判断后台状态
    const { data } = response
    // 处理后端响应数据状态码不在预设值得情况下，处理异常，这里预设值为2000
    if (data.code && data.code != 0) {
      // 再进一步判断
      if (data.code == 3004 || data.code == 3005) {
        data.code == 3005 && Message.error({ content: 'token过期，请重新登录' })
        app.$router.push('/login')
        setToken('')
      } else {
        // 非特定情况
        if (data.msg) Message.error({ content: data.msg, background: true })
      }
      // 抛出错误信息
      return Promise.reject(data)
    } else {
      return Promise.resolve(data)
    }
  }, error => {
    console.log('err' + error) // 帮助debug
    // Message.error({
    //   content: '接口报错了，请稍后重试~',
    //   background: true
    // })
    return Promise.reject(error)
  }
)

export default service
