// @ts-nocheck
import axios from 'axios'
import { message, notification } from 'ant-design-vue'
import { getToken, removeToken, getType } from '@/views/utils/auth'
import store from '../store'
import router from '../router'

axios.defaults.timeout = 300000
// axios.defaults.baseURL = 'https://gzky-server.yiboshi.com'
axios.defaults.baseURL = ''
// type默认为form,如果要在请求体里传json,则传json,如果要上传文件,传file
function fetch (url = '', params = {}, method = 'get', contentType = 'form', token) {
    contentType === 'form' && (contentType = 'application/x-www-form-urlencoded');
    contentType === 'json' && (contentType = 'application/json; charset=utf-8')
    contentType === 'file' && (contentType = 'multipart/form-data')
    //移除空白参数
    let keyArr = [];
    for (let k in params) {
        let val = params[k];
        if (val === null || val === undefined || val === 'null' || val === '' || val === ' ') {
            keyArr.push(k);
        }
    }
    keyArr.forEach(x => {
        delete params[x];
    })
    let query = [];
    for (let k in params) {
        query.push(k + '=' + params[k])
    }
    let qs = query.join('&')
    if (method.toLowerCase() === 'get' && query.length > 0) {
        url += (url.indexOf('?') < 0 ? '?' : '&') + qs
    }
    if (contentType !== 'application/x-www-form-urlencoded' && method !== 'get') {
        qs = params
    }
    let headers = {}
    if (getToken())
        headers = {
            Authorization: 'Bearer ' + getToken(),
            'Content-Type': contentType,
        }
    else
        headers = {
            'Content-Type': contentType,
        }
    return new Promise((resolve, reject) => {
        axios({ method: method, url: url, data: params, headers: headers })
            .then(function (response) {
                if (response.data.code === 'BIZ.BUSSINESS_EXCEPTION') {
                    message.error(response.data.msg);
                }
                if (response.data.code === 'PARAM.EXCEPTION') {
                    message.error(response.data.msg);
                }
                if (response.data.code === 'SYS.SERVER_ERROR') {
                    message.error('500 Internal Server Error!');
                }
                if (response.data.code === 'BIZ.TOKEN_EXPIRATION') {
                    message.error('登录过期,请重新登录');
                    removeToken()
                    store.commit('app/clearStore')
                    window.sessionStorage.clear();
                    router.push(`/login`)
                }
                resolve(response.data);
            }).catch(err => {
                message.error('500 Internal Server Error!');
                reject(err.response)
            })
    })
}

export default fetch