/**
 * 基于原生wx.request封装的请求方法
 * @param {Object} params     参数
 */
import config from '../config/index';
import server from './server';
const request = async function (params, isLoading = true) {
    if (isLoading) {
        uni.showLoading({
            title: '加载中',
            mask: true
        });
    }
    const token = uni.getStorageSync('token');
    const defaultOptions = {
        method: 'GET',
        header: {
            'Content-Type': 'application/json'
        },
        data: {}
    };
    if (token) {
        Object.assign(defaultOptions.header, {
            'X-Access-Token': token,
            Authorization: `Bearer ${token}`
        });
    }

    // 存储在Storage里的用户信息
    const data = {};

    // 合并参数到默认配置
    Object.assign(defaultOptions, params);
    if (Object.hasOwnProperty.call(params, 'data')) {
        // 如果请求用不到上述信息,请把data清空
        Object.assign(data, params.data);
    }

    // 请求URL
    let url = '';
    if (Object.hasOwnProperty.call(params, 'url')) {
        // 根据配置查询
        const flag = params.url.indexOf('http') >= 0;
        url = flag ? params.url : `${config.env.baseUrl}${params.url}`;
    } else {
        // eslint-disable-next-line no-console
        console.log('请求url未定义');
    }
    const options = Object.assign(defaultOptions, {
        url,
        data
    });

    // 调用wx的请求api
    return await uni.request({
        ...options
    })
        .then(async (res) => {
            // 先判断登陆是否失效，401为于后端协商未登录时的状态
            // if (res.data.code === 401) {
            //     server.login();
            // }
            // if (res.data.code === 1002003003) {
            //     // 1002003003 用户不存在，跳转注册
            //     uni.showToast({
            //         icon: 'none',
            //         title: '用户不存在，正在跳转至授权登陆...',
            //         mask: true,
            //         duration: 2000
            //     });
            //     setTimeout(() => {
            //         uni.navigateTo({
            //             url: '/pages/authorize/authorize'
            //         });
            //     }, 2000);
            //     return;
            // }
            // if (res.data.code !== 0) {
            //     uni.showToast({
            //         icon: 'none',
            //         title: res.data.msg
            //     });
            //     return;
            // }
            return res.data;
        })
        .catch(() => {
            uni.showToast({
                title: '网络错误',
                icon: 'error',
                duration: 2000,
                mask: true
            });
        })
        .finally(() => {
            uni.hideLoading();
        });
};
export const post = function () {
    const arg = arguments;
    if (typeof arg[0] === 'object') {
        return request({
            ...arg[0],
            method: 'post'
        });
    }
    if (typeof arg[0] === 'string' && typeof arg[1] === 'object') {
        return request({
            url: arg[0],
            data: arg[1],
            method: 'post'
        });
    }
    return request({
        url: arg[0],
        method: 'post'
    });
};
export const get = function (data) {
    return request(data);
};
export default request;
