import axios from 'axios'
import qs from 'qs'
// import store from 'store/index'
// import { Indicator, Toast } from 'mint-ui'

axios.defaults.timeout = 5000 // 请求超时时间
axios.defaults.retry = 2 // 重新请求次数
axios.defaults.retryDelay = 1 // 重新请求等待时间
// axios.defaults.baseURL = process.env.VUE_APP_BASE_API

axios.defaults.headers.post['Content-Type'] =
    'application/x-www-form-urlencoded;charset=UTF-8' // post请求头的设置
// axios 请求拦截器
axios.interceptors.request.use(
    config => {
        // 可在此设置要发送的token
        // let token = store.getters['login/token'];
        // token && (config.headers.token = token)
        // Indicator.open('数据加载中')

        config.retry = 2 // 重新请求次数
        config.retryDelay = 200 // 重新请求等待时间
        return config
    },
    error => {
        return Promise.error(error)
    }
)
// axios respone拦截器
axios.interceptors.response.use(
    response => {
        if (response.config.url.indexOf('https://wx.xfhd.net/wxapi/api/jsconfig') < 0) {
            console.log(response.config.url, '\n', response.data);
        }

        // 如果返回的状态码为200，说明接口请求成功，可以正常拿到数据
        // 否则的话抛出错误 结合自身业务和后台返回的接口状态约定写respone拦截器
        // Indicator.close()
        // if (response.status === 200 && response.data.code === 0 ) {
        if (response.status == 200) {
            return Promise.resolve(response)
        } else {
            // Toast({
            //     message: response.data.msg,
            //     position: 'middle',
            //     duration: 2000
            // });
            return Promise.reject(response)
        }
    },
    function axiosRetryInterceptor(err) {
        var config = err.config;
        // console.log(config);
        // If config does not exist or the retry option is not set, reject
        if (!config || !config.retry) return Promise.reject(err);

        // Set the variable for keeping track of the retry count
        config.__retryCount = config.__retryCount || 0;

        // Check if we've maxed out the total number of retries
        if (config.__retryCount >= config.retry) {
            // Reject with the error
            return Promise.reject(err);
        }

        // Increase the retry count
        config.__retryCount += 1;

        // Create new promise to handle exponential backoff
        var backoff = new Promise(function (resolve) {
            setTimeout(function () {
                resolve();
            }, config.retryDelay || 1);
        });

        // Return the promise in which recalls axios to retry the request
        return backoff.then(function () {
            return axios(config);
        });

    }
    // error => {
    //     // Indicator.close()
    //     const responseCode = error.response.status
    //     switch (responseCode) {
    //         // 401：未登录
    //         case 401:
    //             break
    //         // 404请求不存在
    //         case 404:
    //             // Toast({
    //             //     message: '网络请求不存在',
    //             //     position: 'middle',
    //             //     duration: 2000
    //             // });
    //             break
    //         default:
    //             // Toast({
    //             //     message: error.response.data.message,
    //             //     position: 'middle',
    //             //     duration: 2000
    //             // });
    //     }

    //     return Promise.reject(error.response)
    // }
)
/**
 * 封装get方法，对应get请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
function get(url, params = {}) {
    return new Promise((resolve, reject) => {
        axios
            .get(url, {
                params: params
            })
            .then(res => {
                resolve(res.data)
            })
            .catch(err => {
                reject(err)
            })
    })
    // 或者return axios.get();
}
/**
 * post方法，对应post请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
function post(url, params) {
    return new Promise((resolve, reject) => {
        axios
            .post(url, qs.stringify(params))
            .then(res => {
                resolve(res.data)
            })
            .catch(err => {
                reject(err)
            })
    })
    //  或者return axios.post();
}

export {
    get,
    post
}
