<script>
	import {
		WxToken
	} from './common/wx_token.js'
	import Api_url from '@/common/config.js'
	var wxtoken = new WxToken();
	export default {
		async onLaunch() {
			// 初始化版本信息
			this.initializeVersionInfo();

			// 检查更新
			this.checkForUpdate();

			// #ifdef MP-WEIXIN
			uni.login({
				provider: 'weixin',
				success: function(loginRes) {
					let data = {
						'code': loginRes.code
					}
					// user.get_xcx_token(data).then(res => {
					// 	uni.setStorageSync('token', res.data.token)
					// 	user.get_info().then(res=>{
					// 		uni.setStorageSync('sfm',res.data.invite_code)
					// 	})
					// })
				}
			})
			// #endif
			// #ifdef H5
			var ua = navigator.userAgent.toLowerCase();
			var isWeixin = ua.indexOf('micromessenger') != -1;
			if (!isWeixin) {
				console.log("非公众号-暂不登陆")
				return false;
			} else {
				wxtoken.verify('userinfo'); //静默获取openid
			}
			//微信公众号获取token -必须是认证的服务号
			// #endif
		},
		onShow: function() {
			// 应用切换到前台时再次检查更新
			this.checkForUpdate();
		},
		onHide: function() {},
		
		methods: {
			/**
			 * 初始化版本信息
			 */
			initializeVersionInfo() {
				// 设置应用版本号（可配置化）
				const appVersion = '1.0.0'; // 可从配置文件读取
				const buildTime = Date.now();

				// 如果没有存储过版本信息，则设置初始值
				if (!uni.getStorageSync('app_version')) {
					uni.setStorageSync('app_version', appVersion);
					uni.setStorageSync('build_time', buildTime);
					console.log(`初始化版本信息: ${appVersion}`);
				}
			},

			/**
			 * 检查小程序更新
			 */
			checkForUpdate() {
				// #ifdef MP-WEIXIN
				try {
					// 双重检查确保在微信小程序环境中
					if (typeof uni !== 'undefined' && typeof uni.getUpdateManager === 'function') {
						const updateManager = uni.getUpdateManager();
						
						// 确保updateManager对象存在且有所需方法
						if (updateManager && typeof updateManager.checkForUpdate === 'function') {
							// 监听向微信后台请求检查更新结果事件
							updateManager.onCheckForUpdate((res) => {
								console.log('检查更新结果:', res);
								if (res.hasUpdate) {
									console.log('发现新版本，准备下载');
									uni.showToast({
										title: '发现新版本',
										icon: 'none',
										duration: 2000
									});
								}
							});
							
							// 监听小程序有版本更新事件
							updateManager.onUpdateReady(() => {
								console.log('新版本下载完成，准备重启应用');
								this.showUpdateDialog();
							});
							
							// 监听小程序更新失败事件
							updateManager.onUpdateFailed(() => {
								console.log('新版本下载失败');
								uni.showToast({
									title: '更新失败，请检查网络',
									icon: 'none',
									duration: 2000
								});
							});
							
							// 主动检查更新
							updateManager.checkForUpdate();
						} else {
							console.log('updateManager 或 checkForUpdate 方法不可用');
						}
					} else {
						console.log('uni.getUpdateManager 不可用，可能不在微信小程序环境中');
					}
				} catch (error) {
					console.error('更新管理器初始化失败:', error);
				}
				// #endif
				
				// #ifdef H5
				// H5环境下的更新检查（可选）
				this.checkH5Update();
				// #endif
			},
			
			/**
			 * 显示更新对话框
			 */
			showUpdateDialog() {
				uni.showModal({
					title: '更新提示',
					content: '新版本已下载完成，是否立即重启应用以更新到最新版本？',
					confirmText: '立即重启',
					cancelText: '稍后重启',
					success: (res) => {
						if (res.confirm) {
							console.log('用户选择立即重启');
							this.applyUpdate();
						} else {
							console.log('用户选择稍后重启');
							// 可以设置定时器在一定时间后自动重启
							this.scheduleDelayedUpdate();
						}
					}
				});
			},
			
			/**
			 * 应用更新并重启
			 */
			applyUpdate() {
				// #ifdef MP-WEIXIN
				try {
					// 双重检查确保在微信小程序环境中
					if (typeof uni !== 'undefined' && typeof uni.getUpdateManager === 'function') {
						const updateManager = uni.getUpdateManager();
						
						// 确保updateManager对象存在且有所需方法
						if (updateManager && typeof updateManager.applyUpdate === 'function') {
							updateManager.applyUpdate();
						} else {
							console.log('updateManager 或 applyUpdate 方法不可用');
							uni.showToast({
								title: '重启功能不可用',
								icon: 'none',
								duration: 2000
							});
						}
					} else {
						console.log('uni.getUpdateManager 不可用，可能不在微信小程序环境中');
						uni.showToast({
							title: '重启功能不可用',
							icon: 'none',
							duration: 2000
						});
					}
				} catch (error) {
					console.error('应用更新失败:', error);
					uni.showToast({
						title: '重启失败，请手动重启',
						icon: 'none',
						duration: 2000
					});
				}
				// #endif
			},
			
			/**
			 * 安排延迟更新
			 */
			scheduleDelayedUpdate() {
				// 5分钟后自动重启
				setTimeout(() => {
					console.log('自动应用更新');
					this.applyUpdate();
				}, 5 * 60 * 1000);
				
				uni.showToast({
					title: '将在5分钟后自动重启',
					icon: 'none',
					duration: 3000
				});
			},
			
			/**
			 * 统一的版本检查方法（支持多平台）
			 */
			checkVersionUpdate() {
				// 检查是否需要提醒更新（避免频繁提示）
				const reminderTime = uni.getStorageSync('update_reminder_time');
				const now = Date.now();

				// 如果用户选择稍后更新，24小时内不再提示
				if (reminderTime && (now - reminderTime < 24 * 60 * 60 * 1000)) {
					console.log('用户选择稍后更新，暂不提示');
					return;
				}

				// 执行服务器版本检查
				this.checkVersionFromServer();
			},

			/**
			 * H5环境下的更新检查（可选功能）
			 */
			checkH5Update() {
				// #ifdef H5
				try {
					// 检查页面缓存版本
					const currentVersion = uni.getStorageSync('app_version') || '1.0.0';
					const buildTime = uni.getStorageSync('build_time') || Date.now();
					const now = Date.now();

					// 每30分钟检查一次更新
					if (now - buildTime > 30 * 60 * 1000) {
						console.log('H5环境检查更新');
						this.checkVersionUpdate();
					}
				} catch (error) {
					console.error('H5更新检查失败:', error);
				}
				// #endif

				// #ifdef MP-WEIXIN
				// 微信小程序也进行服务器版本检查
				this.checkVersionUpdate();
				// #endif
			},
			
			/**
			 * 从服务器检查版本信息（通用）
			 */
			async checkVersionFromServer() {
				try {
					const currentVersion = uni.getStorageSync('app_version') || '1.0.0';
					const platform = this.getPlatform();

					console.log(`检查版本更新 - 当前版本: ${currentVersion}, 平台: ${platform}`);

					// 调用API获取最新版本信息
					const response = await uni.request({
						url: Api_url.domain + '/api/app/version',
						method: 'GET',
						data: {
							platform: platform,
							version: currentVersion
						}
					});

					if (response.data && response.data.code === 1) {
						const versionData = response.data.data;
						const serverVersion = versionData.version;
						const forceUpdate = versionData.force_update || false;
						const updateLog = versionData.update_log || '';

						console.log(`服务器版本: ${serverVersion}, 强制更新: ${forceUpdate}`);

						if (this.compareVersion(serverVersion, currentVersion) > 0) {
							// 保存更新信息
							uni.setStorageSync('latest_version', serverVersion);
							uni.setStorageSync('update_log', updateLog);
							uni.setStorageSync('force_update', forceUpdate);

							// #ifdef MP-WEIXIN
							// 微信小程序的更新由微信管理，这里只提示用户
							this.showVersionUpdateDialog(serverVersion, updateLog, forceUpdate);
							// #endif

							// #ifdef H5
							// H5环境直接提示刷新
							this.showH5UpdateDialog(serverVersion, updateLog, forceUpdate);
							// #endif
						} else {
							console.log('当前版本已是最新');
							// 清除过期的更新信息
							uni.removeStorageSync('latest_version');
							uni.removeStorageSync('update_log');
							uni.removeStorageSync('force_update');
						}
					} else {
						console.warn('获取版本信息失败:', response.data?.msg || '未知错误');
					}
				} catch (error) {
					console.error('服务器版本检查失败:', error);
				}
			},

			/**
			 * 获取当前平台标识
			 */
			getPlatform() {
				// #ifdef MP-WEIXIN
				return 'mp-weixin';
				// #endif

				// #ifdef H5
				return 'h5';
				// #endif

				// #ifdef APP-PLUS
				return 'app';
				// #endif

				return 'unknown';
			},

			/**
			 * 显示版本更新对话框（微信小程序）
			 */
			showVersionUpdateDialog(newVersion, updateLog, forceUpdate) {
				const content = `发现新版本 ${newVersion}\n${updateLog}`;

				if (forceUpdate) {
					// 强制更新
					uni.showModal({
						title: '重要更新',
						content: content + '\n\n此为重要更新，必须立即更新才能继续使用。',
						showCancel: false,
						confirmText: '立即更新',
						success: () => {
							this.triggerWeChatUpdate();
						}
					});
				} else {
					// 可选更新
					uni.showModal({
						title: '发现新版本',
						content: content,
						confirmText: '立即更新',
						cancelText: '稍后更新',
						success: (res) => {
							if (res.confirm) {
								this.triggerWeChatUpdate();
							} else {
								// 记录用户选择稍后更新，24小时后再提示
								uni.setStorageSync('update_reminder_time', Date.now());
							}
						}
					});
				}
			},

			/**
			 * 触发微信小程序更新检查
			 */
			triggerWeChatUpdate() {
				// #ifdef MP-WEIXIN
				try {
					if (typeof uni !== 'undefined' && typeof uni.getUpdateManager === 'function') {
						const updateManager = uni.getUpdateManager();

						if (updateManager && typeof updateManager.checkForUpdate === 'function') {
							updateManager.checkForUpdate();
						}
					}
				} catch (error) {
					console.error('触发微信更新失败:', error);
					uni.showToast({
						title: '请手动删除小程序重新进入',
						icon: 'none',
						duration: 3000
					});
				}
				// #endif
			},
			
			/**
			 * 显示H5更新对话框
			 */
			showH5UpdateDialog(newVersion, updateLog, forceUpdate) {
				const content = `发现新版本 ${newVersion}\n${updateLog}\n\n检测到新版本，建议刷新页面以获得最佳体验`;

				if (forceUpdate) {
					// 强制更新
					uni.showModal({
						title: '重要更新',
						content: content + '\n\n此为重要更新，必须立即刷新才能继续使用。',
						showCancel: false,
						confirmText: '立即刷新',
						success: () => {
							location.reload();
						}
					});
				} else {
					// 可选更新
					uni.showModal({
						title: '发现新版本',
						content: content,
						confirmText: '立即刷新',
						cancelText: '稍后刷新',
						success: (res) => {
							if (res.confirm) {
								location.reload();
							} else {
								// 记录用户选择稍后更新，24小时后再提示
								uni.setStorageSync('update_reminder_time', Date.now());
							}
						}
					});
				}
			},
			
			/**
			 * 版本号比较工具
			 */
			compareVersion(version1, version2) {
				const v1 = version1.split('.').map(Number);
				const v2 = version2.split('.').map(Number);
				
				for (let i = 0; i < Math.max(v1.length, v2.length); i++) {
					const a = v1[i] || 0;
					const b = v2[i] || 0;
					
					if (a > b) return 1;
					if (a < b) return -1;
				}
				
				return 0;
			}
		}
	}
</script>

<style lang="scss">
	// 样式文件已迁移到后端，如需使用请通过网络请求获取
	@import '@/static/styles/app.scss';
	@import "@/uni.scss";

	// 引入FirstUI主题样式
	@import "@/components/firstui/fui-theme/fui-theme.css";
</style>