import {
	Toast
} from "../libs/uniApi";
import {
	getGXconfig,
	miniapp
} from "@/api/uniMP.js";
import {
	ENV
} from '@/config/app';
const mp = uni.requireNativePlugin('uniMP');
import store from "@/store/modules/app.js"

let appid = ''; // 应用id
let wgtFile = ''; // 应用文件地址
let timer = null; // 加载计时器

// 比较版本号大小
function compareVersions(version1, version2) {
	const arr1 = version1.split('.').map(Number);
	const arr2 = version2.split('.').map(Number);
	for (let i = 0; i < Math.max(arr1.length, arr2.length); i++) {
		const num1 = i < arr1.length ? arr1[i] : 0;
		const num2 = i < arr2.length ? arr2[i] : 0;
		if (num1 > num2) {
			return 1;
		} else if (num1 < num2) {
			return -1;
		}
	}
	return 0;
}

// 加载供销小程序
const loadMP = async (id) => {
	appid = id;
	let info = await getGXconfig();
	uni.$emit('showLoading', true, '初始化中');
	mp.getUniMPVersion(id, (ret) => {
		let flag;
		if (ENV == 'prod') {
			flag = false
		} else {
			flag = true
		}
		if (0 != ret.code || compareVersions(info.data.version, ret.versionInfo.name) == 1 || flag ==
			true) {
			let count = 0;
			timer = setInterval(() => {
				if (count < 100 && count > 0) uni.$emit('showLoading', true,
					`初始化中... ${count}%`)
				else uni.$emit('showLoading', true, `初始化中... 99%`)
			}, 200)
			let downloadTask = uni.downloadFile({
				url: info.data.version_info?.dow_url,
				// url: "https://lihai001.oss-cn-chengdu.aliyuncs.com/attach/36e40202405031202367449.wgt",
				success(res) {
					wgtFile = res.tempFilePath;
					setTimeout(() => {
						installMP();
						clearInterval(timer);
						timer = null;
					}, 700)
				},
				fail(res) {
					clearInterval(timer);
					timer = null;
					uni.hideLoading();
				}
			});
			downloadTask.onProgressUpdate((res) => {
				// console.log('初始化进度' + res.progress);
				if (res.progress > count) count += 10;
				if (count >= 90) {
					clearInterval(timer);
					timer = null;
				}
			});
		} else {
			open()
		}
	});
};

//加载商城小程序
const loadMPx = async (id) => {

	appid = id;
	let info = await miniapp();
	console.log('最新版本', info.data);
	console.log(mp, uni);
	// return ;
	uni.$emit('showLoading', true, `初始化中...`)
	mp.getUniMPVersion(id, (ret) => {
		console.log('当前版本', ret);
		let flag;
		if (ENV == 'prod') {
			flag = false
		} else {
			flag = true
		}
		if (0 != ret.code || compareVersions(info.data.appInfo.version, ret.versionInfo.name) == 1 ||
			flag ==
			true) {
			let count = 0;
			timer = setInterval(() => {
				if (count < 100 && count > 0) uni.$emit('showLoading', true,
					`初始化中... ${count}%`)
				else uni.$emit('showLoading', true, `初始化中... 99%`)
			}, 200)

			let downloadTask = uni.downloadFile({
				url: './__UNI__7626C0F.wgt',
				success(res) {
					wgtFile = res.tempFilePath;
					console.log('初始化完成', wgtFile);
					setTimeout(() => {
						installMP();
						clearInterval(timer);
						timer = null;
					}, 700)
				},
				fail(res) {
					clearInterval(timer);
					timer = null;
					uni.hideLoading();
				}
			});
			downloadTask.onProgressUpdate((res) => {
				if (res.progress > count) count += 10;
				if (count >= 90) {
					clearInterval(timer);
					timer = null;
				}
			});
		} else {
			open()
		}
	});
};

// 按信息接口加载小程序
const loadMPurl = async (e) => {
	appid = e.id;
	let FURL = e.url;
	uni.$emit('showLoading', true, `初始化中...`)
	uni.request({
		url: FURL,
		method: 'GET',
		success: (fileInfo) => {
			mp.getUniMPVersion(appid, (ret) => {
				console.log('当前版本', ret);
				let flag;
				if (ENV == 'prod') {
					flag = false
				} else {
					flag = true
				}
				if (0 != ret.code || compareVersions(fileInfo.data?.data?.version, ret
						.versionInfo.name) == 1 || flag ==
					true) {
					let count = 0;
					timer = setInterval(() => {
						if (count < 100 && count > 0) uni.$emit('showLoading', true,
							`初始化中... ${count}%`)
						else uni.$emit('showLoading', true, `初始化中... 99%`)
					}, 200)
					let downloadTask = uni.downloadFile({
						url: fileInfo.data?.data?.down_url,
						success(res) {
							wgtFile = res.tempFilePath;
							console.log('初始化完成', wgtFile);
							setTimeout(() => {
								installMP();
								clearInterval(timer);
								timer = null;
							}, 700)
						},
						fail(res) {
							clearInterval(timer);
							timer = null;
							uni.hideLoading();
						}
					});
					downloadTask.onProgressUpdate((res) => {
						// console.log('初始化进度' + res.progress);
						if (res.progress > count) count += 10;
						if (count >= 90) {
							clearInterval(timer);
							timer = null;
						}
					});
				} else {
					open()
				}
			});

		},
		fail: (err) => {
			console.log('错误:', err);
		}
	})

};

// 商城配置的小程序
const loadAppletMP = async (data) => {
	// console.log(data)
	// return
	appid = data.app_id;
	// return ;
	uni.$emit('showLoading', true, '初始化中');
	mp.getUniMPVersion(appid, (ret) => {
		let flag;
		if (ENV == 'prod') {
			flag = false
		} else {
			flag = true
		}
		if (data.showToast) {
			uni.showLoading({
				title: '正在加载中...'
			});
		}

		if (0 != ret.code || compareVersions(data.version, ret.versionInfo.name) == 1 || flag ==
			true) {
			let count = 0;
			timer = setInterval(() => {
				if (count < 100 && count > 0) uni.$emit('showLoading', true,
					`初始化中... ${count}%`)
				else uni.$emit('showLoading', true, `初始化中... 99%`)
			}, 200)


			let downloadTask = uni.downloadFile({
				url: data.url,
				// url: "https://lihai001.oss-cn-chengdu.aliyuncs.com/attach/3ffde202405031254278460.wgt",
				success(res) {
					wgtFile = res.tempFilePath;
					console.log('初始化完成', wgtFile);
					setTimeout(() => {
						installMP(data);
						clearInterval(timer);
						timer = null;
					}, 700)
				},
				fail(res) {
					clearInterval(timer);
					timer = null;
					uni.hideLoading();
				}
			});
			downloadTask.onProgressUpdate((res) => {
				if (res.progress > count) count += 10;
				if (count >= 90) {
					clearInterval(timer);
					timer = null;
				}
			});
		} else {
			open()
		}
	});
};

// 按远程文件地址加载小程序
const loadMPdns = async (e) => {
	appid = e.id;
	let FURL = e.url;
	uni.$emit('showLoading', true, `初始化中...`)
	let count = 0;
	timer = setInterval(() => {
		if (count < 100 && count > 0) uni.$emit('showLoading', true, `初始化中... ${count}%`)
		else uni.$emit('showLoading', true, `初始化中... 99%`)
	}, 200)
	let downloadTask = uni.downloadFile({
		url: FURL,
		success(res) {
			wgtFile = res.tempFilePath;
			console.log('初始化完成', wgtFile);
			setTimeout(() => {
				installMP();
				clearInterval(timer);
				timer = null;
			}, 700)
		},
		fail(res) {
			clearInterval(timer);
			timer = null;
			uni.hideLoading();
		}
	});
	downloadTask.onProgressUpdate((res) => {
		if (res.progress > count) count += 10;
		if (count >= 90) {
			clearInterval(timer);
			timer = null;
		}
	});

};

// 小程序版本信息
const getVersion = (id) => {
	appid = id;
	return new Promise((resolve, reject) => {
		mp.getUniMPVersion(appid, (ret) => {
			console.log('供销', ret);
		});
	})
}
// 初始化小程序
const installMP = (data) => {
	mp.getUniMPVersion(appid, (ret) => {
		doInstallMP(data);
		console.log('getUniMPVersion: ' + JSON.stringify(ret));
	});
};
const doInstallMP = (data) => {
	mp.installUniMP({
		appid: appid,
		wgtFile: wgtFile
	}, (r) => {
		if (0 == r.code) {
			open(data);
		} else {
			uni.hideLoading();
			clearInterval(timer);
			timer = null;
			uni.showModal({
				title: '初始化失败',
				content: JSON.stringify(r),
				showCancel: false
			});
		}
		console.log('初始化: ' + JSON.stringify(r));
	});
};

const open = (id = null) => {
	uni.hideLoading()
	uni.$emit('showLoading', false);
	let token = uni.getStorageSync('LOGIN_STATUS_TOKEN');
	if (!token) return uni.showToast({
		icon: 'none',
		title: '请先登录'
	})
	let avatar = store?.state?.userInfo?.avatar;
	mp.openUniMP({
		appid: typeof(id) == 'object' ? appid : (id || appid),
		extraData: {
			uniMP: true,
			token: token,
			avatar: avatar,
		},
	}, (ret) => {
		uni.hideLoading();
		if (0 != ret.code) {
			uni.showModal({
				title: '启动失败',
				content: JSON.stringify(ret),
				showCancel: false
			});
		}

		if (id.type == 2) {
			setTimeout(() => {
				console.log("发送给小程序的", id)
				mp.sendUniMPEvent(appid, 'tocustomlist', id, (ret) => {
					console.log("开始发送消息")
				});
			}, 1000)
		}

	});
}

export default {
	loadMP,
	loadMPurl,
	loadMPx,
	loadMPdns,
	installMP,
	loadAppletMP,
	doInstallMP,
	getVersion,
	open
}