import { getToken } from '@/services/bus/token';
import eventBus from '@/utils/eventBus/index';
import axios from 'axios';

const request = axios.create({
    // 配置选项
});

// 添加请求拦截器
request.interceptors.request.use(
    (config) => {
        // 在发送请求之前做些什么
        // 配置token 没有登录前 游客token（写死); 登录后服务返回的token

        config.headers.Authorization = getToken();
        console.log('config.headers.Authorization', config.headers.Authorization);
        return config;
    },
    (error) => {
        console.log(error);
        // 对请求错误做些什么
        return Promise.reject(error);
    }
);

request.interceptors.response.use(
    (response) => {
        // 状态码为2开头,对响应数据做点什么
        // console.log(response.data);
        if (response.status === 200) {
            return response;
        } else {
            return Promise.reject(response.statusText);
        }
    },
    async (error) => {
        // 状态码不为2开头,对响应错误做点什么
        if (error.response) {
            // 请求发出去了并收到响应 状态码超出了2xx的范围
            const { status, data } = error.response;
            if (status === 400) {
                console.error(`${data.msg}(${data.code})`);
            } else if (status === 401) {
                // 主要处理token失效时 页面进行接口请求时的异常情况

                eventBus.$emit('logout');
                console.warn('待处理，token失效')
            } else if (status === 403) {
                console.error(`${data.msg}(${data.code})`);
            } else if (status === 404) {
                console.error('请求资源不存在');
            } else if (status >= 500) {
                console.error('服务端错误,请联系管理员');
            }
            // 抛出异常给调用者
            return Promise.reject(error.response.data.msg);
        } else if (error.request) {
            // 请求发出去没有收到响应
            return Promise.reject('请求发出去没有收到响应');
        } else {
            // 在设置请求的时候发生了一些事情,触发了错误
            return Promise.reject('请求失败' + error.message);
        }
    }
);

export default request;
