import axios from 'axios';
import {
    baseUrl
} from '@/config';
import {
    Message,
    Loading
} from 'element-ui';
const service = axios.create({
    baseURL: baseUrl,
    // timeout: 10000,
    headers: {
        'content-Type': 'application/json;charset=UTF-8',
        'MobileType' : 0
    }, // request timeout
    tokenAuth: true, // 当前接口是否需要携带token
    loading: true, // 是否需要全局加载层 适用于用户操作时候
    isAbnormal: true, // 是否需要全局弹出错误信息
    filterData: false, //是否过滤双重data, false 只过滤一层data,可获取message
});


// 请求拦截器
service.interceptors.request.use(config => {
    // config.headers.Authorization = 'Bearer ' + getToken();
    // if (config.loading) {
    //     config.loadingId = Loading.service({
    //         lock: true,
    //         text: 'Loading',
    //         spinner: 'el-icon-loading',
    //         background: 'rgba(0, 0, 0, 0.05)',
    //     });
    // }
    if (config.tokenAuth) {
        let token = JSON.parse(sessionStorage.getItem('token'));
        if (token) {
            config.headers.Authorization = JSON.parse(sessionStorage.getItem('token'));
        }
    }
    // console.log(config, 'config');
    return config;
},
    error => {
        Promise.reject(error);
    }
)

// 响应拦截
service.interceptors.response.use(response => {
    // 统一处理状态
    if (response.status === 200) {
        if (response.config.filterData) {
            return response.data.data;
        } else {
            return response.data
        }

    } else {
        return Promise.reject('响应非200状态，应该进入底部响应拦截的err');
    }
},
    // 处理服务端返回的status不为200时
    error => {
        // if (error && error.config && error.config.loading) {
        //     error.config.loadingId.close();
        // }
        // console.log(router);
        // 拿到http状态码;
        if (error && error.config && error.config.isAbnormal) {
            if (error.response) {
                error.message = error.response.data && error.response.data.message ? error.response.data.message : null;
                if (!error.message) {
                    switch (error.response.status) {
                        case 400:
                            error.message = '访问超时';
                            break;
                        case 401:
                            error.message = '无效的授权码，请重新登录';
                            break;
                        case 402:
                            error.message = '无效的密钥';
                            break;
                        case 403:
                            error.message = '拒绝访问';
                            break;
                        case 404:
                            error.message = '请求错误,未找到该资源';
                            break;
                        case 405:
                            error.message = '请求方法未允许';
                            break;
                        case 408:
                            error.message = '请求超时';
                            break;
                        case 500:
                            error.message = '服务器运行异常';
                            break;
                        case 501:
                            error.message = '网络未实现';
                            break;
                        case 502:
                            error.message = '网络错误';
                            break;
                        case 503:
                            error.message = '服务不可用';
                            break;
                        case 504:
                            error.message = '网络超时';
                            break;
                        case 505:
                            error.message = 'http版本不支持该请求';
                            break;
                        default:
                            error.message = `未知错误${error.response.status}`;
                    }
                }
            } else {
                error.message = '连接到服务器失败';
            }
            Message.error({
                message: error.message,
            });
        }

        return Promise.reject(error);
    }
)
export default service;