import axios from 'axios';

const api = axios.create({
    // baseURL: 'http://127.0.0.1:8002/novel-admin',
    baseURL: 'https://prod-api.budingxiaoshuo.com/novel-admin',
    // baseURL: import.meta.env.VITE_API_BASE_URL || 'http://127.0.0.1',
    timeout: 50000,
    headers: {
		'Content-Type' : 'application/x-www-form-urlencoded'
    }
});

// 请求拦截器
api.interceptors.request.use(
    config => {
        const token = localStorage.getItem('X-Access-Token');
        if (token) {
            config.headers['X-Access-Token'] = token;
        }
        return config;
    },
    error => {
        return Promise.reject(error);
    }
);

// 响应拦截器
api.interceptors.response.use(
    response => {
        const { data } = response;
        // 根据API文档的统一返回格式处理
        if (data.success === false) {
            return Promise.reject(new Error(data.message || '请求失败'));
        }
        return data;
    },
    error => {
        if (error.response && error.response.status === 401) {
            console.log('[API] 401 未授权，触发store处理');
            
            // 使用动态导入获取store并处理401错误
            import('../store/index.js').then(({ useMainStore }) => {
                const store = useMainStore();
                store.handle401Error();
            }).catch(err => {
                console.warn('[API] 无法访问store:', err);
                // 如果无法访问store，至少清除token
            localStorage.removeItem('X-Access-Token');
            localStorage.removeItem('token');
            localStorage.removeItem('user');
            localStorage.removeItem('isAuthor');
            localStorage.removeItem('bookshelf');
            });
            
        } else if (error.response) {
            // 处理其他HTTP错误
            const { status, data } = error.response;
            console.error(`[API] HTTP错误 ${status}:`, data);
            
            // 根据不同状态码提供更友好的错误信息
            let errorMessage = '网络请求失败';
            switch (status) {
                case 400:
                    errorMessage = data?.message || '请求参数错误';
                    break;
                case 403:
                    errorMessage = '没有权限访问';
                    break;
                case 404:
                    errorMessage = '请求的资源不存在';
                    break;
                case 500:
                    errorMessage = '服务器内部错误';
                    break;
                case 502:
                case 503:
                case 504:
                    errorMessage = '服务器暂时不可用，请稍后重试';
                    break;
                default:
                    errorMessage = data?.message || `请求失败 (${status})`;
            }
            
            return Promise.reject(new Error(errorMessage));
        } else if (error.request) {
            // 网络错误
            console.error('[API] 网络错误:', error.request);
            return Promise.reject(new Error('网络连接失败，请检查网络设置'));
        } else {
            // 其他错误
            console.error('[API] 请求错误:', error.message);
            return Promise.reject(error);
        }
    }
);

export default api;