import config from './config';
let arr = [];
export default (options = {}) => {
    if (options.data == undefined) {
        options.data = {};
    }
    // 防止接口重复点击
    if (arr.indexOf(options.url) === -1) {
        arr.push(options.url);
    } else {
        return new Promise((resolve, reject) => {
            reject({
                code: -1,
                msg: '请勿重复提交',
            });
        });
    }
    return new Promise((reslove, reject) => {
        uni.request({
            url:
                options.url.indexOf('http') === -1
                    ? config.domain + options.url
                    : options.url,
            data: {
                ...options.data,
            },
            header: {
                // 'Content-Type': 'application/json;charset=UTF-8',
                "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
                Authorization: '12',
                ...options.header,
            },
            method: options.method || 'GET',
            success: async (res) => {
                console.log(res);
                if (arr.indexOf(options.url) > -1) {
                    arr.splice(arr.indexOf(options.url), 1);
                }
                if (
                    res.data.resultCode !== 10000 &&
                    res.data.code !== 'A0000'
                ) {
                    errHandler(res.data);
                    reject(res.data);
                } else {
                    reslove(res.data);
                }
            },
            fail: (err) => {
                if (arr.indexOf(options.url) > -1) {
                    arr.splice(arr.indexOf(options.url), 1);
                }
                reject(err);
                uni.showToast({
                    icon: 'none',
                    title: '网络异常，请稍后再试',
                });
                uni.reLaunch({
                    url: '/pages/user/login',
                });
            },
        });
    });
};

/**
 * 错误处理
 * @param {Number} code 错误码
 */
function errHandler(res) {
    switch (res.resultCode) {
        case '401':
            // #ifdef MP
            uni.removeStorageSync('Cookie');
            uni.clearStorageSync();
            // #endif
            uni.reLaunch({ url: '/pages/user/login' });
            break;
        default:
            uni.showToast({
                title: res.msg || '服务端未知错误',
                duration: 2000,
                icon: 'none',
            });
            break;
    }
}
