<script>
import timPresenceManager from '@/utils/tim-presence-manager.js';
import timManager from '@/utils/tim-manager.js';

export default {
	data() {
		return {
			_timInitializing: false
		}
	},

	onLaunch: function () {

		
		// 初始化TIM（全局）
		this.initGlobalTIM();
		
		// 延迟挂载全局方法（等待 App 实例创建完成）
		setTimeout(() => {
			const app = getApp();
			if (app) {
				app.globalData.initGlobalTIM = this.initGlobalTIM.bind(this);
				app.globalData.initPresenceManager = this.initPresenceManager.bind(this);
				
			}
		}, 100);
	},
	
	onShow: function () {
	
		// 延迟检查TIM连接状态，避免在登录过程中重复调用
		setTimeout(() => {
		
			this.checkTIMConnection();
		}, 500);  // 缩短延迟时间到 500ms
	},
	
	onHide: function () {
		
		// App切换到后台时，不断开连接，保持在线状态
	},
	
	methods: {
		
		/**
		 * 初始化全局TIM
		 */
		async initGlobalTIM() {
			// 避免在登录过程中被重复触发
			if (this._timInitializing) {
				return
			}
			this._timInitializing = true
			try {
				// 获取当前登录用户ID
				const userInfo = uni.getStorageSync('userInfo');
				const userId = uni.getStorageSync('userId') || userInfo?.userId || userInfo?.id;
				
				if (!userId) {
					
					return;
				}
				
				// 如果TIM已经登录且用户ID匹配，跳过
				if (timManager.isLogin && String(timManager.userId) === String(userId)) {
					
					return;
				}
				
				
			// 初始化TIM SDK（只在首次初始化）
			const SDKAppID = 1600109674;
			if (!timManager.tim) {
				timManager.init(SDKAppID);
			
			}
			
			// 如果用户ID不匹配，先登出旧用户
			if (timManager.isLogin && timManager.userId && String(timManager.userId) !== String(userId)) {
				
				try {
					await timManager.logout();
				
				} catch (e) {
				
				}
			}
			
			// 获取UserSig
			const res = await uni.request({
				url: `https://api.zhongruanke.cn/api/im/getUserSig?userId=${userId}`,
				method: 'GET'
			});
			
			if (res[1].data.code === 200) {
				const userSig = res[1].data.data.userSig;
				
				// 登录TIM
				await timManager.login(String(userId), userSig);
				
				
				// TIM 登录成功后，初始化在线状态管理器
				await this.initPresenceManager(userId);
			} else {
				throw new Error('获取UserSig失败');
			}
			} catch (error) {
				
			} finally {
				this._timInitializing = false
			}
		},
		
		/**
		 * 初始化在线状态管理器
		 */
		async initPresenceManager(userId) {
			try {
				
				
				// 初始化 TIM + WebSocket 混合状态管理器
				await timPresenceManager.init(String(userId));
				
				
			} catch (error) {
				
			}
		},
		
		/**
		 * 检查TIM连接状态和WebSocket连接状态
		 */
		checkTIMConnection() {
			
			// 获取当前登录用户ID
			const userId = uni.getStorageSync('userId');
			
			
			if (!userId) {
			
				return;
			}
			
			// 检查 TIM 是否登录
			
			
			if (!timManager.isLogin) {
			
				this.initGlobalTIM();
				return;
			}
			
			// 检查 WebSocket 是否连接
		
			if (!timPresenceManager.isConnected) {
				this.initPresenceManager(userId);
			} 
		}
	},
	
	globalData: {
	
	}
}
</script>

<style lang="scss">
/*每个页面公共css */
page {
	min-height: 100vh;
	width: 750rpx;
	background-color: #fff;
	padding-bottom: constant(safe-area-inset-bottom);  
	padding-bottom: env(safe-area-inset-bottom);
}

.content {
	display: flex;
	flex-direction: column;
}
</style>
