//api路径
import { isNotEmptyUtils } from "@/utils/index";

export default async(url = '', data = {}, type = 'POST', method = 'fetch',server='CONTENT') => {
	type = type.toUpperCase();

	// url = (server==='WECHAT'?wechatUrl:baseUrl) + url;
    if (url.match("^http") == null){
        url = localStorage.getItem("Url") + url;
		}
		
		// url = 
		console.log('@@@@@@@@@@@@@in oss fetch' , url);
		// @@@@@@@@@@@@@in oss fetch null/5DF4291EDDA34BA08AD234C6BB7BE65D
		// https://dev-api.yunqueyi.com/middle/oss/token/B1A7745D85D74EB4966125A4E0979ACE
	
	console.log("完整url:",url)
    if (type == 'GET' && data) {
		let dataStr = ''; //数据拼接字符串
		Object.keys(data).forEach(key => {
			dataStr += key + '=' + data[key] + '&';
		})

		if (dataStr !== '') {
			dataStr = dataStr.substr(0, dataStr.lastIndexOf('&'));
			url = url + '?' + dataStr;
            // url = encodeURI(url + '?' + dataStr, true);
		}
	}

	if (window.fetch && method == 'fetch') {
        let requestConfig = {
            credentials: 'include',
            method: type,
            // mode: "cors",
            headers: {
                // 'Access-Control-Allow-Origin': '*',
                'Accept': '*',
                'Content-Type': 'application/json',
                // 'token': localStorage.getItem('token') || null, //固定传header：
                // 'system_code': 'todo'   //固定传header：系统编号
            },
        }

        if (type == 'POST' || type === 'PUT' || type === 'PATCH' || type === 'DELETE' && data) {
            Object.defineProperty(requestConfig, 'body', {
                value: JSON.stringify(data)
            })
        }
		try {
			const response = await fetch(url, requestConfig);
			const responseJson = await response.json();

			return responseJson
		} catch (error) {
			throw new Error(error)
		}
	} else {
		return new Promise((resolve, reject) => {
			let requestObj;
			if (window.XMLHttpRequest) {
				requestObj = new XMLHttpRequest();
			} else {
				requestObj = new ActiveXObject;
			}

			let sendData = '';
			if (type == 'POST' || type == 'DELETE' || type == 'PUT') {
				sendData = JSON.stringify(data);
			}

			requestObj.open(type, url, true);
			requestObj.setRequestHeader("Content-Type", "application/json");
			requestObj.send(sendData);

			requestObj.onreadystatechange = () => {
				if (requestObj.readyState == 4) {
					if (requestObj.status == 200) {
						let obj = requestObj.response
						if (typeof obj !== 'object' && isNotEmptyUtils(obj)) {
							obj = JSON.parse(obj);
						}
						resolve(obj)
					} else {
						reject(requestObj)
					}
				}
			}
		})
	}
}
