<script>
	import { updateLuOrderPayStatus } from "@/api/service";

	export default {
		globalData: {
			// 用于从首页跳转到服务页面时传递需要高亮的分类
			serviceCategory: null
		},
		onLaunch: function() {
			console.log('App Launch')
			// 检查登录状态
			this.checkLoginStatus()
		},
		onShow: function() {
			console.log('App Show')
			// 1. uni-app 中通过 uni.getEnterOptionsSync() 调用（和微信小程序API一致，只是前缀改为uni）
			const options = uni.getEnterOptionsSync();
			console.log("查询到的返回数据")
			console.log(options)

			// 2. 注意：scene 返回的是数字类型，不是字符串！原生代码中写 '1038' 会导致判断失败
			if (options.scene === 1038 &&
				options.referrerInfo?.appId === 'wxef277996acc166c3') {

				// 从收银台小程序返回的逻辑
				const extraData = options.referrerInfo.extraData;
				console.log("extraData",extraData)

				if (!extraData) {
					uni.showToast({
						title: '当前通过物理按键返回，未接收到返参，建议自行查询交易结果',
						icon: 'none',
						duration: 3000
					});
				} else {
					if (extraData.code === 'success') {
						// 有返回成功标记后，启动轮询查询订单状态
						// 1. 优先使用收银台回传的订单号
						const orderNumberFromExtra =
							extraData.orderNumber || extraData.reqsn || extraData.orderNo;
						// 2. 如果对方没有回传，则使用我们在跳转前自己缓存到本地的订单号
						const storedOrderNumber = uni.getStorageSync("lastOrderNumber");
						const orderNumber = orderNumberFromExtra || storedOrderNumber;

						if (orderNumber) {
							this.startOrderStatusPolling(orderNumber);
						} else {
							uni.showToast({
								title: '支付返回缺少订单号，请稍后在服务记录中查看',
								icon: 'none',
								duration: 3000
							});
						}
					} else if (extraData.code === 'cancel') {
						uni.showToast({
							title: '支付已取消',
							icon: 'none'
						});
					} else {
						uni.showToast({
							title: `支付失败：${extraData.errmsg || '未知错误'}`,
							icon: 'none',
							duration: 3000
						});
					}
				}
			}
		},
		onHide: function() {
			console.log('App Hide')
			// 页面整体隐藏时，清理轮询定时器
			if (this._orderStatusTimer) {
				clearInterval(this._orderStatusTimer);
				this._orderStatusTimer = null;
			}
		},
		methods: {
			// 检查登录状态
			checkLoginStatus() {
				const token = uni.getStorageSync('token')

				// 如果有token，且当前在登录页，则跳转到首页
				if (token) {
					// 延迟一下，确保页面已经初始化
					setTimeout(() => {
						const pages = getCurrentPages()
						const currentPage = pages[pages.length - 1]
						const currentRoute = currentPage ? currentPage.route : ''

						// 如果当前在登录页，跳转到首页
						if (currentRoute === 'pages/login/login') {
							uni.switchTab({
								url: '/pages/index/index',
								fail: () => {
									// 如果switchTab失败（可能不在tabBar页面），使用reLaunch
									uni.reLaunch({
										url: '/pages/index/index'
									})
								}
							})
						}
					}, 100)
				}
			},
			// 启动轮询支付状态
			startOrderStatusPolling(orderNumber) {
				// 避免重复轮询
				if (this._orderStatusTimer) {
					clearInterval(this._orderStatusTimer);
					this._orderStatusTimer = null;
				}

				let times = 0;
				const maxTimes = 5; // 最多轮询 20 次，大约 1 分钟

				this._orderStatusTimer = setInterval(async () => {
					times++;
					try {
						const res = await updateLuOrderPayStatus({ orderNumber });
						// 约定：接口有返回数据即认为支付成功
						if (res) {
							clearInterval(this._orderStatusTimer);
							this._orderStatusTimer = null;
							// 成功后清理本地缓存的订单号
							uni.removeStorageSync("lastOrderNumber");

							uni.showToast({
								title: '支付成功',
								icon: 'success'
							});

							// 跳转到服务记录页面，默认展示「待核销」tab
							uni.navigateTo({
								url: '/pages/profileSub/serviceRecords?tab=pending_verification'
							});
						} else if (times >= maxTimes) {
							clearInterval(this._orderStatusTimer);
							this._orderStatusTimer = null;
							uni.showToast({
								title: '支付状态确认超时，请稍后在服务记录中查看',
								icon: 'none',
								duration: 3000
							});
						}
					} catch (error) {
						console.error('查询订单支付状态失败:', error);
						if (times >= maxTimes) {
							clearInterval(this._orderStatusTimer);
							this._orderStatusTimer = null;
						}
					}
				}, 3000);
			}
		}
	}
</script>

<style>
	/*每个页面公共css */
</style>