import apiConfig from '../config/api_config.js';

	const request = (options) => {
	return new Promise((resolve, reject) => {
		const app = getApp();
		// 使用统一的域名配置
		const baseURL = apiConfig.fiberApiBaseURL;

		// 获取token
		const token = wx.getStorageSync('token');

		// 构建请求头
		const header = {
			'Content-Type': 'application/json',
			...options.header
		};

		// 如果有token，添加到header
		if (token) {
			header.Authorization = `Bearer ${token}`;
		}

		wx.request({
			url: `${baseURL}${options.url}`,
			method: options.method || 'GET',
			data: options.data,
			header: header,
			success: (res) => {
				// 首先检查是否是401错误
				if (res.statusCode === 401 || res.data.code === 401) {
					// 清除登录信息
					wx.removeStorageSync('token');
					wx.removeStorageSync('userInfo');
					// 立即跳转到登录页
					wx.reLaunch({
						url: '/pages/login/index'
					});
					reject(res.data);
					return;
				}

				// 处理其他状态码
				if (res.statusCode === 200) {
					// 支持两种响应格式：
					// 1. { code: 200, data: {...} } - 旧格式
					// 2. { success: true, ... } - 新格式
					// 3. 直接返回数据对象（如 OSS 凭证接口）
					
					// 检查是否是直接返回数据的接口（如 OSS 凭证接口）
					const isDirectDataResponse = options.url && (
						options.url.includes('/oss/upload/signature')
					);
					
					// 如果是直接返回数据的接口，直接 resolve
					if (isDirectDataResponse) {
						resolve(res.data);
						return;
					}
					
					if (res.data.code === 200 || res.data.success === true) {
						resolve(res.data);
					} else {
						// 检查是否是获取进度接口，如果是则不显示错误提示（没有进度是正常情况）
						const isProgressInfo = options.url && options.url.includes('/camp/progress/info');
						if (!isProgressInfo) {
							// 其他业务错误才显示提示
							wx.showToast({
								title: res.data.message || '请求失败',
								icon: 'none'
							});
						}
						// 无论是否显示提示，都 resolve，让调用方自己处理
						resolve(res.data);
					}
				} else {
					// HTTP 状态码错误
					wx.showToast({
						title: '服务器错误',
						icon: 'none'
					});
					reject(res);
				}
			},
			fail: (err) => {
				wx.showToast({
					title: '网络错误',
					icon: 'none'
				});
				reject(err);
			}
		});
	});
};

export default request; 