import store from "@/store/index.js";
import config from "@/common/config";
import method from "@/common/methodTool";
var num = 1;
let isLoginLose = false
//接口api
export const BASE_URL = config.BASE_URL;
// #ifdef MP-WEIXIN
export let tenantId = config.tenantId; // 祥粤云学堂：867735392558919680，祥粤学堂：667735392758919630, 中建云学堂-567735392758918520
// #endif
// #ifdef H5
export const host = setHost();
export let tenantId = uni.getStorageSync(host) || "";
// #endif
export const myRequest = (options) => {
	if (store.state.allowLoading && !options.noLoading) {
		uni.showLoading({
			title: "拼命加载中...",
			mask: true,
		});
	}
	return new Promise(async (resolve, reject) => {
		// #ifdef H5
		if (!tenantId) {
			tenantId = await getTenantId();
			uni.setStorageSync(host, tenantId);
		}
		// #endif
		let token = uni.getStorageSync("token");
		uni.request({
			url: BASE_URL + options.url,
			method: options.method || "GET",
			data: options.data,
			header: options.noToken ? {
				TenantId: tenantId,
			} : {
				AuthorizationToken: "WX " + (token ? token : uni.getStorageSync(
					"token_temp")),
				TenantId: tenantId,
			},
			success: async (res) => {
				if (!options.compleLoading) {
					// 请求的接口有带compleLoading 就不隐藏加载中
					uni.hideLoading();
				}
				if (res.data.code == 401) {
					if (num <= 10) {
						if (!uni.getStorageSync("user_account")) {
							var pages = getCurrentPages(); // 获取栈实例
							let currentRoute = pages[pages.length - 1].route; // 获取当前页面路由
							if (currentRoute != "pages4/login/login") {
								uni.navigateTo({
									url: "/pages4/login/login",
								});
								uni.removeStorageSync("h5_code");
							}
						} else {
							num++;
							res = await doRequest(options);
						}
					} else {
						uni.removeStorageSync("user_account");
						var pages = getCurrentPages(); // 获取栈实例
						let currentRoute = pages[pages.length - 1].route; // 获取当前页面路由
						if (currentRoute != "pages4/login/login") {
							uni.navigateTo({
								url: "/pages4/login/login",
							});
							uni.removeStorageSync("h5_code");
						}
					}
				} else if (res.data.code == 409) {
					if (isLoginLose) {
						return
					}
					isLoginLose = true
					uni.removeStorageSync("user_account");
					uni.removeStorageSync("token");
					uni.removeStorageSync("h5_code");
					uni.showModal({
						content: "已从其他设备登录，是否重新登录！",
						showCancel: false,
						success: (k) => {
							if (k.confirm) {
								isLoginLose = false
								uni.navigateTo({
									url: "/pages4/login/login",
								});
							}
						},
					});
					reject();
				} else if (res.data.code == 601) {
					uni.switchTab({
						url: "/pages/learn/index",
					});
					uni.showModal({
						content: res.data.msg,
						showCancel: false,
						success: (k) => {
							if (k.confirm) {}
						},
					});
					reject();
				} else if (res.data.code == 699) {
					// #ifdef MP-WEIXIN
					resolve(res);
					// #endif
					// #ifdef H5
					window.location.href = res.data.msg
					reject();
					// #endif
				}
				resolve(res);
			},
			fail: (err) => {
				uni.hideLoading();
				uni.showToast({
					title: "系统升级中",
					icon: "none",
				});
				console.log("请求失败err---: ", options.url);
				if (options.url == "/face/certification/CompareFace") {
					console.log("人脸识别错误---1:", err);
				}
				reject(JSON.stringify(err));
			},
			complete: () => {
				// uni.hideLoading()
				// uni.hideToast()
			},
		});
	});
	async function doRequest(response) {
		let user_account = uni.getStorageSync("user_account");
		var datas = {
			url: "/refreshToken/" + user_account,
			method: "get",
			noToken: true,
		};
		const res = await myRequest(datas);
		if (res.data.code === 200) {
			uni.setStorageSync("token", res.data.data.token);

			var userInfo = {
				url: "/app/user/getInfo",
				method: "get",
				data: {
					fromPlat: 1
				}, // 来源平台 1小程序 2PC网站
			};
			const resUser = await myRequest(userInfo);
			if (resUser.data.code === 200) {
				store.state.userInfo = resUser.data.data;
				uni.setStorageSync("user_account", user_account);
				num = 1;
			}
			let onset = await myRequest(response);
			return onset;
		} else {
			var pages = getCurrentPages(); // 获取栈实例
			let currentRoute = pages[pages.length - 1].route; // 获取当前页面路由
			console.log("request-->333:", currentRoute);
			if (currentRoute != "pages4/login/login") {
				uni.navigateTo({
					url: "/pages4/login/login",
				});
				uni.removeStorageSync("h5_code");
			}
		}
	}
};

function getTenantId() {
	return new Promise((resolve, reject) => {
		uni.request({
			url: config.BASE_URL + "/app/common/findTenantId",
			method: "get",
			data: {
				hostH5: host,
			},
			success: (res) => {
				if (res.data.code == 200) {
					resolve(res.data.data);
				} else {
					uni.showToast({
						title: "请求接口失败",
						icon: "none",
					});
					reject();
				}
			},
			fail: (err) => {
				uni.showToast({
					title: "请求接口失败",
					icon: "none",
				});
				reject(JSON.stringify(err));
			},
		});
	});
}

function setHost() {
	let host = window.location.host;
	return method.checkDomain(host) ? host : "120.79.166.78:19012";
}