<template>
	<view></view>
</template>
<script>
	import {
		info,
		personalData,
		leadInfo,
		servInfo,
	} from "@/api/all.js"
	import { initWebSocket, disconnectWebSocket, rebindUser, addMessageHandler, isWebSocketConnected } from '@/utils/ws/initWebSocket.js';
	import { chatRoomManager } from '@/utils/chat/chatRoomManager.js';
	
	export default {
		onLaunch() {
			// 初始化WebSocket（如果已登录）
			// 参考患者端的方式，直接初始化，不延迟
			this.initWebSocketConnection();
			// 获取小程序更新机制兼容 
			if (uni.canIUse('getUpdateManager')) {
				const updateManager = uni.getUpdateManager()
				// 检查是否有新版本发布
				updateManager.onCheckForUpdate(function(res) {
					if (res.hasUpdate) {
						//小程序有新版本，则静默下载新版本，做好更新准备
						updateManager.onUpdateReady(function() {
							uni.showModal({
								title: '更新提示',
								content: '新版本已经准备好，是否重启应用？',
								success: function(res) {
									if (res.confirm) {
										//新的版本已经下载好，调用 applyUpdate 应用新版本并重启
										updateManager.applyUpdate()
									} else if (res.cancel) {
										//如果需要强制更新，则给出二次弹窗，如果不需要，则这里的代码都可以删掉了
										uni.showModal({
											title: '温馨提示',
											content: '我们已经做了新的优化，请及时更新哦~',
											showCancel: false, //隐藏取消按钮，也可显示，取消会走res.cancel，然后从新开始提示
											success: function(res) {
												//第二次提示后，强制更新           
												if (res.confirm) {
													// 新的版本已经下载好，调用 applyUpdate 应用新版本并重启
													updateManager.applyUpdate()
													uni.clearStorageSync()
												} else if (res.cancel) {
													//重新回到版本更新提示
													autoUpdate()
												}
											}
										})
									}
								}
							})
						})
						// 新的版本下载失败
						updateManager.onUpdateFailed(function() {
							uni.showModal({
								title: '温馨提示',
								content: '新版本已经上线，请您删除当前小程序，重新搜索打开',
							})
						})
					}
				})
			} else {
				// 提示用户在最新版本的客户端上体验
				uni.showModal({
					title: '温馨提示',
					content: '当前微信版本过低，可能无法使用该功能，请升级到最新版本后重试。'
				})
			}
		},
		created() {
			if (uni.getStorageSync('token')) {
				this.getInfo()
			}
			
			// 监听登录事件
			uni.$on('user-login', () => {
				this.initWebSocketConnection();
			});
			
			// 监听登出事件
			uni.$on('user-logout', () => {
				disconnectWebSocket();
			});
			
			// 监听token刷新事件
			uni.$on('token-refreshed', () => {
				rebindUser();
			});
			
			// 注册聊天室消息处理器
			addMessageHandler((data) => {
				chatRoomManager.handleWebSocketMessage(data);
			});
		},
		onShow: function() {
			// 应用显示时，如果已登录但WebSocket未连接，尝试连接
			if (uni.getStorageSync('token') && !isWebSocketConnected()) {
				this.initWebSocketConnection();
			}
			// 检测拨号返回：详情页 onCallbackCall 调用 makePhoneCall 前写入了 pendingCallback，
			// 回到小程序时广播给当前详情页/抽屉组件，由其自动弹回访表单
			this.checkPendingCallback();
		},
		onHide: function() {
			// 应用隐藏时不断开WebSocket，保持连接以便接收消息
			// 如果需要断开，可以调用 disconnectWebSocket()
		},
		methods: {
			/**
			 * 初始化WebSocket连接
			 * 职责：检查登录状态，如果已登录则初始化WebSocket
			 * 参考患者端的方式，直接连接，不延迟
			 */
			initWebSocketConnection() {
				const token = uni.getStorageSync('token');
				const doctorId = uni.getStorageSync('doctor_id') || uni.getStorageSync('user_id');
				
				if (token && doctorId) {
					// 直接初始化，不延迟（参考患者端的方式）
					initWebSocket();
				}
			},

			/**
			 * 检测从拨号返回小程序的场景
			 * 就诊人详情点击"回访"时写入 pendingCallback（upId/phone/ts）；
			 * 用户回到小程序时若 5 分钟内有效，则广播事件触发回访表单抽屉，
			 * 之后立即清除 storage 标记，避免下次 onShow 重复弹窗
			 */
			checkPendingCallback() {
				let payload = null;
				try {
					payload = uni.getStorageSync('pendingCallback');
				} catch (e) {
					payload = null;
				}
				if (!payload || typeof payload !== 'object') return;
				const now = Date.now();
				const ts = Number(payload.ts) || 0;
				// 时间窗 5 分钟：避免误判；超时直接丢弃
				if (ts && now - ts > 5 * 60 * 1000) {
					try { uni.removeStorageSync('pendingCallback'); } catch (e) { /* ignore */ }
					return;
				}
				// 广播后清理，由当前可见的详情页/抽屉组件接收处理
				try { uni.removeStorageSync('pendingCallback'); } catch (e) { /* ignore */ }
				uni.$emit('patient:callbackReturned', payload);
			},
			
			
			async getInfo() {
				let role = uni.getStorageSync('identity')
				let req = {};
				const data = {
					store_id: uni.getStorageSync('store_id') || '11001',
				}
				role == 1 && (req = await info(data))
				role == 2 && (req = await personalData(data))
				if (req.errcode == 0) {
					console.log(req, 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
					// 未完善信息
					if (req.data.user?.status == 3) {
						// this.$toast('您还没有完善信息，请先完善信息')
						// this.$go('../../subPackages/sub_workbench/workbench_upInfo/index')
						uni.navigateTo({
							url: '/pages/workbench/examine'
						})
						return
					}

					if (role == 2 && req.data.user?.status == 2) {
						let logInfo = uni.getStorageSync('logInfo') || {}
						let userInfo = {
							...logInfo,
							...(uni.getStorageSync('userInfo') || {}),
							...req.data
						}
						userInfo.status = userInfo.user && userInfo.user.status != '' ? userInfo.user.status : userInfo
							.status

						uni.setStorageSync('identity', userInfo['role'])
						uni.removeStorageSync('logInfo')
						uni.setStorageSync('userInfo', userInfo)
						setTimeout(() => {
							console.log('mainnnnnnnnnnnnnnnnnnnnnnnn');
							role == 2 && this.$go('/pages/pharmacist/index', 3)
						}, 100)
					}

					if (role == 1 && req.data.DoctorInfo.user?.status == 2) {
						let logInfo = uni.getStorageSync('logInfo') || {}
						let userInfo = {
							...logInfo,
							...(uni.getStorageSync('userInfo') || {}),
							...req.data
						}
						userInfo.status = userInfo.user && userInfo.user?.status != '' ? userInfo.user.status : userInfo
							.status

						uni.setStorageSync('identity', userInfo['role'])
						uni.removeStorageSync('logInfo')
						uni.setStorageSync('userInfo', userInfo)
						setTimeout(() => {
							console.log('mainnnnnnnnnnnnnnnnnnnnnnnn');
							role == 1 && this.$go('/pages/workbench/index', 3)
						}, 100)
					}
				} else {
					this.$toast(req.msg)
				}
			}
		}
	}
</script>
<style lang="scss">
	@import "uview-ui/index.scss";
	@import "common/css/app.css";
</style>