<script>
export default {
	globalData: {
		NativeEvent: true,
		recentNativeEvent: "", // 初始化一个全局变量
		recentNativeData: 0 // 初始化一个全局变量
	},
	onLaunch: function (options) {
		const startTime = Date.now()
		console.log('App Launch', options)

		// 1. 获取并存储系统信息（只获取一次）
		const systemInfo = uni.getSystemInfoSync()
		uni.setStorageSync('systemInfo', {
			platform: systemInfo.platform,
			system: systemInfo.system,
			osName: systemInfo.osName,
			osVersion: systemInfo.osVersion,
			statusBarHeight: systemInfo.statusBarHeight,
			windowWidth: systemInfo.windowWidth,
			windowHeight: systemInfo.windowHeight,
			isIOS: systemInfo.platform === 'ios',
			isAndroid: systemInfo.platform === 'android'
		})

		// 2. 同步初始化配置（必须完成）
		this.initConfig(options)

		// 启动完成
		console.log(`App 启动耗时: ${Date.now() - startTime}ms`)

		// 初始化埋点，进入支付宝模拟器首页
		this.$apiUserEvent('all', {
			type: 'event',
			key: 'index',
			value: "进入支付宝模拟器首页",
		})
	},

	onShow: function () {
		console.log('App Show')
		if (this.globalData.NativeEvent) {
			this.globalData.NativeEvent = false
			//监听宿主传递消息
			uni.onNativeEventReceive((event, data) => {
				if (event) {
					if (event == "token") {
						let header = uni.getStorageSync('header')
						header["x-token"] = data
						uni.setStorageSync('header', header)
						//获取宿主用户信息
						try {
							//获取宿主用户信息
							this.$getUserInfo()
						} catch (error) {
							//TODO handle the exception
						}
					} else if (event == "jump") {
						if (data) {
							let pages = getCurrentPages();
							let currentPage = pages[pages.length - 1];
							let currentUrl = currentPage.route;
							if (currentUrl != data) {
								uni.navigateTo({
									url: '/' + data
								});
							}
						}

					} else if (event == 'wx_pay_result' || event == 'ios_pay_result') {
						this.globalData.recentNativeEvent = event
						this.globalData.recentNativeData = data
					}
					console.log('全局监听：接收到宿主App消息-' + event + '：' + data);
				}
			})
		}
	},

	onHide: function () {
		console.log('App Hide')
	},
	onExit: function () {
		// 关闭数据库
		// #ifdef APP
		// plus.sqlite.closeDatabase({ name: 'zyds' })
		uni.sendNativeEvent('unimp_stop_alipay', "stop", ret => {
			// console.log('宿主App回传的数据：' + ret);
		});
		// #endif
		console.log('App onExit')
	},

	methods: {
		/**
		 * 初始化应用配置
		 */
		initConfig(options) {
			// 检查是否有外部传入的配置数据
			const hasExtraData = options?.referrerInfo?.extraData &&
				JSON.stringify(options.referrerInfo.extraData) !== '{}'

			if (hasExtraData) {
				this.initFromExtraData(options.referrerInfo.extraData)
			} else {
				this.initFromEnvironment()
			}
		},

		/**
		 * 从外部数据初始化配置
		 */
		initFromExtraData(extraData) {
			// 批量设置 Storage，减少 I/O 次数
			const storageData = {
				host: extraData.host,
				header: {
					"x-token": extraData['x-token'],
					"x-version": extraData['x-version'],
					"x-platform": extraData['x-platform'],
					"x-device-id": extraData['x-device-id'],
					"x-mobile-brand": extraData['x-mobile-brand'],
					"x-mobile-model": extraData['x-mobile-model'],
					"x-channel": extraData['x-channel'],
					"x-package": extraData['x-package'],
					"x-click-id": extraData['x-click-id'],
					// #ifdef APP-PLUS
					"header": {
						"version": this.$version,
					}
					// #endif
				},
				encrypt: extraData['encrypt'],
				decrypt: extraData['decrypt']
			}

			// 批量写入
			Object.keys(storageData).forEach(key => {
				uni.setStorageSync(key, storageData[key])
			})
		},

		/**
		 * 从环境配置初始化
		 */
		initFromEnvironment() {
			if (process.env.NODE_ENV === 'development') {
				this.initDevelopmentConfig()
			} else {
				// 生产环境警告延迟显示，避免阻塞启动
				setTimeout(() => {
					this.showProductionWarning()
				}, 100)
			}
		},

		/**
		 * 初始化开发环境配置
		 */
		initDevelopmentConfig() {
			// 批量设置开发环境配置
			const devConfig = {
				host: "https://flaunt.batiao8.com/",
				header: { "x-token": "ebe14dab-1879-4c5d-9148-727b96b30aad" },
				decrypt: "e4rOtnF8tJjtHO7ecZeJHN1rapED5ImB",
				encrypt: "xn08hYoizXhZ1zHP8DVqfCm2yHxPmhil"
			}

			Object.keys(devConfig).forEach(key => {
				uni.setStorageSync(key, devConfig[key])
			})
		},

		/**
		 * 显示生产环境警告
		 */
		showProductionWarning() {
			uni.showModal({
				title: '提示',
				showCancel: false,
				content: "将退出,请重新进入",
				success: function (res) {
					// #ifdef APP-PLUS
					plus.runtime.quit()
					// #endif
				}
			})
		}
	}
}
</script>

<style>
@import "./common/color.css";
</style>