// 引入store实例
import store from '../store/index.js'

// 引入外部JS文件中的变量
const envConfig = require('../config/env.js')

// 配置基础URL
const baseUrl = envConfig.baseApi;

const request = (url = '', data = {}, type = 'GET', header1 = {}) => {
	// 可以在这里添加token等公共参数
	const userInfo = uni.getStorageSync('userInfo');
	if (userInfo) {
		const token = userInfo.token; // 使用const更合适，避免意外修改
		header1.Authorization = `Bearer ${token}`;
	}

	// 合并请求头，默认Content-Type为json
	const headerinfo = {
		'Content-Type': 'application/json',
		...header1 // 允许覆盖默认头
	}

	return new Promise((resolve, reject) => {
		uni.request({
			method: type,
			url: baseUrl + url,
			data: data, // 修复变量名拼写错误（date -> data）
			header: headerinfo,
			dataType: 'json',
		}).then((res) => { // 直接接收成功响应对象
			setTimeout(() => {
				// uni.hideLoading();
			}, 200);

			// 正确处理响应对象
			if (res.statusCode === 200) {
				const code = res.data.code;

				// 处理登录过期等特殊情况
				if (code === -9) {
					// 清除本地存储
					uni.removeStorageSync('isLogin')
					//uni.removeStorageSync('userInfo')
					
					setTimeout(() => {
						uni.reLaunch({
							url: '../../pages/Login/Login'
						});
					}, 500);
					return reject('登录已过期！');
				}
				resolve(res.data);
			} else {
				// 处理HTTP错误状态码
				const errorMsg = res.data?.msg || `请求失败（${res.statusCode}）`;
				uni.showToast({
					title: errorMsg,
					icon: 'none',
					duration: 2000
				});
				reject(new Error(errorMsg));
			}

		}).catch(error => {
			// 处理网络错误等异常情况
			uni.showToast({
				title: '网络请求失败，请检查网络',
				icon: 'none',
				duration: 2000
			});
			console.error('请求异常:', error);
			reject(error);
		})
	});
}

export default request