import store from "@/store"

export function host(host='default',suffix='/plant_manage'){
	var url=process.env.NODE_ENV === 'development'?{
			// default:`http://i5skii.natappfree.cc` //陈
			// default:`http://jjytvc.natappfree.cc` //马
			// default:`http://6exd5b.natappfree.cc` //何
			default:"http://192.168.0.14:7000"
		}:{
			default:``
		}
	return ({
		default:`${url.default}${suffix}`,
		imgUrl:`${url.default}/plant_manage/sys/common/static`
	})[host]
}

//加载状态
let loadNum=0

// 自定义封装uniapp请求
const request=async function(url,param={}){
	if(!param.disabledLoad){
		loadNum++;
		uni.showLoading({
			title:"加载中",
			mask:true,
		})
	}
	//路径数据
	var pathData=Object.entries({...(url.match(/\?(.+)/)||{1:""})[1].split("&").map(v=>v.split('=')).filter(v=>v[0]&&v[1]).reduce((a,b)=>{a[b[0]]=b[1];return a},{}), ...(param.params||{})}).map(v=>`${v[0]}=${v[1]}`).join("&")

	var header={
		...param.header||{},
		"X-Access-Token":store.getters.token,
	}
	
	if(param.file||param.filePath){
		var res=await uni.uploadFile({
			url:`${param.host||host(undefined,param.suffix)}${('/'+url).replace(/\/{2}/,'/').replace(/\?.+/,"")}?${pathData}`,
			file:param.file||{},
			filePath:param.filePath||"",
			name:"file",
			formData:param.body||{},
			timeout:param.timeout||60*1000,
			header,
		}).then(data=>({...data[1],data:JSON.parse(data[1].data)}))
	}else{
		var res=await uni.request({
			url:`${param.host||host(undefined,param.suffix)}${('/'+url).replace(/\/{2}/,'/').replace(/\?.+/,"")}?${pathData}`,
			method:param.method||"get",
			data:param.body,
			timeout:30*1000,
			header,
		}).then(data=>data[1])
	}
	
	setTimeout(()=>{
		if(!param.disabledLoad){
			loadNum--;
		}
		if(loadNum<=0){
			uni.hideLoading()
		}
	},600)
	if(res){
		if(res.data.code==401&&!param.skipToken){
			store.commit('outLogin')
			return{statu:false, msg:"登录超时!"}
		}
		else if(res.data.code==200)return { statu:true, data:res.data.result }
		else if(res.statusCode==404)return {statu:false,msg:"地址不存在!"}
		else return {statu:false,msg:res?.data?.message||"服务器错误!"}
	}else{
		return { statu:false, msg:"服务器错误!"}
	}
}

export default request