import axios from 'axios'
import qs from 'qs'
import router from '../router'
import { Message } from 'element-ui'

const Axios = axios.create({
  timeout: 60000,
  responseType: 'json',
  withCredentials: true,
  queryData: {},
  urlData: {},
  headers: {
    'Content-Type': 'multipart/form-data'
  }
})

Axios.interceptors.request.use((config) => {
  config.urlData = {...config.urlData, org: 'MQ'}
  // 处理请求data,若为get请求，拼到url后面，若为post请求，直接添加到body中
  let urlData = qs.stringify(config.urlData)
  let queryData = qs.stringify(config.queryData)
  // 判断是通过斜杠传参
  if (config.url.indexOf(':') > -1) {
    if (typeof config.urlData === 'object') {
      config.url = Object.keys(config.urlData).reduce((url, k) => { // 此方法对每个元素进行处理
        const re = new RegExp(`:${k}(?!w)`, 'i')
        return url.replace(re, config.urlData[k])
      }, config.url)
    } else {
      config.url = config.url.slice(0, config.url.indexOf(':')) + urlData
    }
  }
  if (queryData) {
    config.url += '?' + queryData
  }
  let fm = new FormData()
  for (let k in config.data) {
    if (Array.isArray(config.data[k])) {
      fm.append(k, ...config.data[k].map(v => `${k}=${encodeURIComponent(v)}`))
    } else {
      fm.append(k, config.data[k])
    }
  }
  config.data = fm
  return config
}, (error) => {
  console.log(error)
})

// Axios.interceptors.response.use((res) => {
//   // return new Promise((resolve, reject) => {
//   //   if (res.data.code === 200) {
//   //     resolve(res.data.result)
//   //   } else if (res.data.code === 401) {
//   //     router.push({ name: 'login' })
//   //     reject(res.data)
//   //   } else {
//   //     Message({
//   //       message: res.data.message,
//   //       type: 'error'
//   //     })
//   //     reject(res.data)
//   //   }
//   // })
// }, (error) => {
//   console.log(error)
// })

const ajax = (...args) => {
  return new Promise((resolve, reject) => {
    Axios(...args).then(({ data }) => {
      // console.log(111)
      const { code, message, result } = data
      if (code === 200) {
        resolve(result)
      } else if (code === 401) {
        router.push({ name: 'login' })
      } else {
        Message({
          message: message,
          type: 'error'
        })
      }
    }).catch(reject)
  })
}

export default ajax
