import Global from '../utils/global.js'

let baseUrl=Global.baseUrl

let tokenUrl = `${baseUrl}/blade-auth/oauth/token?tenantId=000000&username=admin&password=21232f297a57a5a743894a0e4a801fc3&grant_type=password&scope=all&type=account`

let myConfig={}

const refreshToken = ()=>{
	return new Promise((resolve,reject)=>{
		uni.request({
			url: tokenUrl,
			method: "POST",
			header:{
				Authorization:"Basic c2FiZXI6c2FiZXJfc2VjcmV0"
			},
			success: (res)=>{
				let token=res.data.token_type+" "+res.data.access_token
				let tokenExprieIn=res.data.expires_in
				let tokenExpireTime = Date.now() + tokenExprieIn * 1000
				let data=JSON.stringify({"token":token,"tokenExpireTime":tokenExpireTime})
				uni.setStorage({key: 'token',data: data})
				resolve(token)
			},
			fail: (err)=>{
				reject(err)
			}
		})
  })
}

function getToken () {
  let tokenObj = {}
  try {
    tokenObj = uni.getStorageSync("token")
    tokenObj = tokenObj ? JSON.parse(tokenObj) : {}
  } catch(e) {
    console.error('get token from storage error')
  }
  return tokenObj
}

const install = async (Vue, vm) => {
	// 此为自定义配置参数，具体参数见上方说明
	Vue.prototype.$u.http.setConfig({
		baseUrl: baseUrl,
		loadingText: '努力加载中~',
		loadingTime: 800,
		header: {
			'content-type': 'application/json;charset=UTF-8'
		},
	});
	// 请求拦截，配置Token等参数
	Vue.prototype.$u.http.interceptor.request = (async (config) => 	{
		const tokenObj = getToken()
		config.header['Blade-Auth'] = tokenObj.token
		if (tokenObj.token && tokenObj.tokenExpireTime) {
		  const now = new Date() + 0;
		  if (now >= tokenObj.tokenExpireTime) {
			  config.header['Blade-Auth']= await refreshToken()
		  }
		} else {
			config.header['Blade-Auth'] = await refreshToken()
		}
		return config;
	})
Vue.prototype.$u.http.interceptor.response = (async (res) => {
	return new Promise((resolve,reject)=>{
		if(res.code == 200) {
			return resolve(res.data);
		}else if(res.code==400){
			return resolve(res);
		}else if(res.code == 401) {
			uni.showToast({
				title: '授权已过期，请重新进入',
				icon: 'none',
			})
			return reject(res);
		} else if(res.code == 500){
			uni.showToast({
				title:'服务器异常',
				icon:'none'
			})
			return reject(res);
		} else {
			// 如果返回false，则会调用Promise的reject回调，
			// 并将进入this.$u.post(url).then().catch(res=>{})的catch回调中，res为服务端的返回值
			return reject(res);
		}
	});
})
		
// Vue.prototype.$u.http.interceptor.response = async (res) => {
// 	if(res.code == 200) {
// 		return res.data;
// 	}else if(res.code==401){
// 		uni.showToast({
// 			title:'授权已过期，请重新进入小程序',
// 			icon:'none',
// 		})
// 		return false
// 	}
// 	else if(res.code==500){
// 		uni.showToast({
// 			title:'服务器异常',
// 			icon:'none'
// 		})
// 	}
// 	else {
// 		console.log(res)
// 		// 如果返回false，则会调用Promise的reject回调，
// 		// 并将进入this.$u.post(url).then().catch(res=>{})的catch回调中，res为服务端的返回值
// 		return false;
// 	}
// }

}
export default {
	install
}