import {
	URL,
	appid
} from './url'

const request = (option) => {
	return new Promise((resolve, reject) => {

		// 默认不显示加载中提示
		if (!option.hideLoading) {
			uni.showLoading({
				title: option.loadingText || '加载中...',
				mask: true
			})
		}
		
		uni.request({
			url: URL + option.url,
			method: option.method,
			data: option.data,
			header: {
				"Content-Type": "application/x-www-form-urlencoded",
					...option.headers,
				'appid': appid,
				'Authorization': "Bearer " + uni.getStorageSync('token'),
				'Clientid': uni.getStorageSync('client_id')
			},
			success(res) {

				
				// 检查响应状态码
				if (res.statusCode !== 200) {
					console.error(`HTTP状态码错误: ${res.statusCode}`, res.data)
					
					// 为了适应某些服务器的异常响应，我们仍然返回数据
					if (res.data) {
						resolve(res.data)
						return
					}
					
					reject({msg: `请求失败，状态码：${res.statusCode}`})
					return
				}
				
				// 检查业务状态码
				if (res.data && res.data.code !== 200) {
					console.warn(`业务状态码错误: ${res.data.code}`, res.data)
					
					// 判断是否需要忽略数据为空的错误
					if (option.ignoreEmptyError && 
						(res.data.code === 500 && res.data.msg && 
						(res.data.msg.includes('未找到') || res.data.msg.includes('不存在')))) {
						// 对于指定需要忽略的错误，返回一个标准的"成功但数据为空"的响应
						resolve({
							code: 200,
							msg: "操作成功",
							data: []
						})
						return
					}
					
					// 仍然返回数据，由业务逻辑处理
					resolve(res.data)
					return
				}
				
				resolve(res.data)
			},
			fail(err) {
				// 网络请求本身失败
				console.error(`请求失败: ${option.url}`, err)
				reject(err)
			},
			complete() {
				// 隐藏加载提示
				if (!option.hideLoading) {
					uni.hideLoading()
				}
			}
		})
	})
}


export default request