// api/request.js
import { BASE_URL } from './CommonValues.js';
import { loginSystem } from '@/api/login.js';

export function GET(url, data) {
	return SIMPLE(url, data, 'GET');
}
export function GET_TOKEN(url, data, token) {
	return SIMPLE_TOKEN(url, data, token, 'GET');
}

export function POST(url, data) {
	return SIMPLE(url, data, 'POST');
}

export function POST_TOKEN(url, data) {
	return SIMPLE_TOKEN(url, data, token, 'POST');
}

export function DELETE(url, data) {
	return SIMPLE(url, data, 'DELETE');
}

export function PUT(url, data) {
	return SIMPLE(url, data, 'PUT');
}

let requestTime = 0;

export async function SIMPLE(url, data, method) {
	// 防止首次访问没有token
	if(requestTime == 0) {
		token = await loginSystem();
		if(token.data) {
			// 如果有code表示没有拿到token
			SIMPLE(url, data, method)
			return;
		}
		requestTime += 1;
	} else {
		var token = uni.getStorageSync("APP_TOKEN");
	}
	return new Promise((resolve, reject) => {
		uni.request({
			url: `${BASE_URL}${url}`,
			method: method,  
			header: {
				"Content-Type": "application/json;charset=utf-8",
				"Authorization": token
			},
			dataType: 'json',
			data: data,
			success: res => {
				console.log(`API响应 ${url}:`, res);
				
				// 更灵活的状态码判断
				let isSuccess = false;
				
				// 检查HTTP状态码
				if (res.statusCode === 200) {
					// 检查响应数据
					if (res.data) {
						// 如果data是数组，直接认为是成功的
						if (Array.isArray(res.data)) {
							isSuccess = true;
						}
						// 如果有code字段且为200
						else if (res.data.code === 200 || res.data.code === '200') {
							isSuccess = true;
						}
						// 如果有statusCode字段且为200
						else if (res.data.statusCode === 200 || res.data.statusCode === '200') {
							isSuccess = true;
						}
						// 如果没有code字段但有data字段
						else if (res.data.data !== undefined) {
							isSuccess = true;
						}
						// 如果data是对象但不是错误结构
						else if (typeof res.data === 'object' && !res.data.errMsg) {
							isSuccess = true;
						}
					} else {
						// 没有data字段但状态码是200
						isSuccess = true;
					}
				}
				
				if (isSuccess) {
					resolve(res.data)
				} else {
					console.error('请求返回错误状态:', res.data);
					reject(res)
				}
			},
			fail: err => {
				console.error('请求失败:', err);
				reject(err)
			}
		})
	})
}

export function SIMPLE_TOKEN(url, data, token, method) {
	return new Promise((resolve, reject) => {
		uni.request({
			url: `${BASE_URL}${url}`,
			method: method,  
			header: {
				"Content-Type": "application/json;charset=utf-8",
				"Authorization": token
			},
			dataType: 'json',
			data: data,
			success: res => {
				console.log(`API响应 ${url}:`, res);
				
				// 更灵活的状态码判断
				let isSuccess = false;
				
				// 检查HTTP状态码
				if (res.statusCode === 200) {
					// 检查响应数据
					if (res.data) {
						// 如果data是数组，直接认为是成功的
						if (Array.isArray(res.data)) {
							isSuccess = true;
						}
						// 如果有code字段且为200
						else if (res.data.code === 200 || res.data.code === '200') {
							isSuccess = true;
						}
						// 如果有statusCode字段且为200
						else if (res.data.statusCode === 200 || res.data.statusCode === '200') {
							isSuccess = true;
						}
						// 如果没有code字段但有data字段
						else if (res.data.data !== undefined) {
							isSuccess = true;
						}
						// 如果data是对象但不是错误结构
						else if (typeof res.data === 'object' && !res.data.errMsg) {
							isSuccess = true;
						}
					} else {
						// 没有data字段但状态码是200
						isSuccess = true;
					}
				}
				
				if (isSuccess) {
					resolve(res.data)
				} else {
					console.error('请求返回错误状态:', res.data);
					reject(res)
				}
			},
			fail: err => {
				console.error('请求失败:', err);
				reject(err)
			}
		})
	})
}

export default {
	GET,
	POST,
	DELETE,
	PUT,
	GET_TOKEN
}