import axios from 'axios'
import { Message } from 'element-ui';
import Router from '../router'
/**
 * 使用自定义配置新建一个 axios 实例
 * baseURL = 请求路径
 * timeout = 请求超时配置
 */
const request = axios.create({
  baseURL: process.env.BASE_API,
  // baseURL: 'http://81.70.84.72:30047/',
  // baseURL: baseUrl+":30047/",
  timeout: process.env.TIME_OUT,
  method: "post",
  type: "JSON"
})
// let toast = null
/**
 * request拦截器
 * 可以在这里添加 Header 头部信息,等
 */
request.interceptors.request.use(config => {
  //  显示加载
  // Spin.show()
  //  获取accessToken
  //  添加请求头信息,处理安全性问题
  let accessToken = "1111111"
  if (accessToken !== undefined) {
    config.headers.Authorization = accessToken
  } else {
    config.headers.Authorization = 'Basic dnVlOnZ1ZQ=='
  }
  //  添加时间戳防止IE不刷新页面
  if (config.type != 'FORM') {
    if (config.method == 'post') {
      config.data = {
        ...config.data
      }
    }
    else if (config.method == 'get') {
      // config.params = {
      //   ...config.params,
      //   // _t: Date.parse(new Date()) / 1000
      // }
      // config.params = params
    }
  } else {
    let formData = ''
    Object.keys(config.data).forEach((key) => {
      formData += key + '=' + config.data[key] + '&'
    })
    config.data = formData
    config.headers['Accept'] = 'application/json'
    config.headers['Content-Type'] = 'application/x-www-form-urlencoded'
  }
  return config
}, error => {
  // 处理请求错误
  Promise.reject(error)
})

/**
 * 下面的注释为通过response自定义code来标示请求状态,当coBASE_APIde返回如下情况为权限有问题,登出并返回到登录页
 * 如通过xmlhttprequest 状态码标识 逻辑可写在下面error中
 */
// 响应拦截器
request.interceptors.response.use(
  response => {
    //  隐藏加载
    // Spin.hide()
    // 请求成功处理
    // if (response.data.status === 50000) {
    //   Message.error('凭证过期,请重新登录')
    //   Router.push('/')
    // }
    return response.data
  },
  error => {
    //  隐藏加载
    // Spin.hide()
    // 处理请求错误
    const response = error.response
    if (response != undefined && response.data) {
      // if (response.data.status == '401' && response.status == 401) {
      //   Message.error('凭证过期,请重新登录')
      //   // Router.push('/')
      // } else if (response.status == 500) {
      //   Message.error(response.data.message)
      // } else if (response.status != 200) {
      //   Message.error(response.data.message)
      // }
      return response.data
    } else if (response) {
      switch (response.status) {
        case 400:
          Message.error('错误的请求')
          break
        case 401:
          Message.error('凭证过期,请重新登录')
          break
        case 403:
          Message.error('拒绝访问')
          break
        case 404:
          Message.error('请求错误,未找到该资源')
          break
        case 405:
          Message.error('请求方法未允许')
          break
        case 408:
          Message.error('请求超时')
          break
        case 500:
          Message.error('服务器端出错')
          break
        case 501:
          Message.error('网络错误,请检查网络')
          break
        case 502:
          Message.error('网络错误,请检查网络')
          break
        case 503:
          Message.error('服务不可用')
          break
        case 504:
          Message.error('网络请求超时')
          break
        case 505:
          Message.error('http版本不支持该请求')
          break
        default:
          Message.error(`连接错误${error.response.status}`)
      }
    } else {
      Message.error(error.message)
    }
    // 弹出层
    return Promise.reject(error)
  }
)

export default request