import wxApp from "./wecaht.min.app.js";
 import request from "./request.js"
let token = null;
let requestLoginTime = 0;

// 获取token
export const getToken = async () => {

	if (getToken.promise) return getToken.promise;
	if(!token) token = uni.getStorageSync('token');
	
	// token格式化
	if (token && typeof token === "string") token = JSON.parse(token);
	
	console.log("checkToken", checkToken(token));
	
	if (!token) getToken.promise = login();
	else if (checkToken(token)) return Promise.resolve(token.token);
	else {
		getToken.promise = login();
	}
	
	getToken.promise = getToken.promise
		.finally(() => {
			getToken.promise = null;
		})
		.then(r => {
			console.log("refresh");
			return setToken(r);
		});

	return getToken.promise;
};


// 登录
export const login = async () => {
	requestLoginTime++;
	if (requestLoginTime != 1) {
		let loginResponed = await loginPromise();
	}
	let code = await (wxApp.getWxMinAppUuerCode());
	let res = request.post("/api/auth/login",{code:code,appid:wxApp.getWXAppId()});
	requestLoginTime = 0;
	return res;
	// return 
};


const loginPromise = () => {
	return new Promise((resolve, reject) => {
		setTimeout(() => {
			resolve(true)
		}, 800)
	})
}


// 检测数据结果
export const checkResult = r => {
	if (!r.data.code) {
		return r.data.data;
	} else {
		return Promise.reject(r);
	}
};

// 刷新token
const refreshToken = () => {
	
	// let res = request.post("/api/auth/refreshToken",{refreshToken:code,appid:wxApp.getWXAppId()});
	console.log('11111111111sssssssssssssssss',token); 
	// return fly
	// 	.get("/refreshToken", {
	// 		token: token.token
	// 	}, {
	// 		headers: {
	// 			Authorization: token.token 
	// 		}
	// 	}) 
	// 	.then(r => {
	// 		return r;
	// 	})
	// 	.catch(e => {
	// 		console.log(e);
	// 		console.error("刷新token失败");
	// 		return Promise.reject(e);
	// 	});
};

// 检查token的有效期
const checkToken = t => {
	return new Date().getTime() < t.time;
};

// 设置token
const setToken = async t => {
	token = formatToken(t);
	uni.setStorageSync("token",token);
	return t.token;
};

// 清除token 
export const clearToken = async () => {
	token = null;
	uni.removeStorageSync('token');
	console.log("clear token done"); 
};

// 处理token的格式
const formatToken = t => { 
	t.token = "Bearer " + t.accessToken;
	t.time = ((t.expiration -600)* 1000);
	return t; 
};