/**
 * 使用方法：
 * - 导入该http组件
 *     import http from '@/utils/http';
 * - 发 GET 自动带cookie
 *     const { data } = await http.get('/userinfo');
 * - 发 POST，也会自动带 cookie
 *     await http.post('/posts', { title: 'hello' });
 */

import axios from 'axios';

const http = axios.create({
    baseURL: 'https://rop.cc/apitest/cookie',
    timeout: 5000,
    withCredentials: true  //提示浏览器,带上cookie
});

// 请求拦截器：自动附加 token
// http.interceptors.request.use(cfg => {
//     cfg.headers['Authorization'] = `Bearer ${token}`;
//     return cfg;
// }, err => Promise.reject(err));

// 响应拦截器：统一处理 401（未授权）
http.interceptors.response.use(res => res, err => {
    // 检查错误类型是否为 AxiosError，并且是否为超时错误
    if (err.code === 'ECONNABORTED' && err.message.includes('timeout')) {
        // 超时错误的处理
        console.error('请求超时：', err.message);
        alert('请求超时，请稍后再试');
        return Promise.resolve(); // 返回一个 resolved promise，防止继续传播
    }
    if (err.response) {
        const status = err.response.status;
        
        switch (status) {
            case 401:
                // 重定向到登录页
                window.location.href = '/apitest/login';
                break;
            case 403:
                alert('权限不足，请联系管理员');
                break;
            case 404:
                console.warn('请求的资源未找到');
                break;
            case 500:
                alert('服务器出错，请稍后再试');
                break;
            case 502:
                alert('网关错误，请稍后再试');
                break;
            case 503:
                alert('服务不可用，请稍后再试');
                break;
            case 504:
                alert('网关超时，请稍后再试');
                break;
            default:
                console.error('请求失败:', err);
            
        }
        return Promise.resolve();
        
    } else {
        // 非响应错误
        console.error('非响应错误:', err);
        // 处理非响应错误
        if (err instanceof Error) {
            alert('请求失败，请检查网络连接');
        }
    }
    return Promise.reject(err);
});
export default http;

