import axios from 'axios'
import qs from 'qs'
import toolClass from './util'
import { Toast } from '../../node_modules/vant';

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

Axios.interceptors.request.use((config) => {
  // 处理请求data,若为get请求,拼到url后面,若为post请求,直接添加到body中
  config.urlData = {...config.urlData, org: 'MQ'}
  let urlData = qs.stringify(config.urlData)
  let queryData = qs.stringify(config.queryData)
  // 判断是通过斜杠传参还是通过query传参
  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)
    }
  }
  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)
})

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) {
        // reject(code)
        toolClass.getCode()
      } else {
        Toast({
          message: message,
          type: 'error'
        })
      }
    }).catch(reject)
  })
}

export default ajax