<script>
	import store from './store'
	
	export default {
		data(){
			return {
				audioTip: null
			}
		},
		methods: {
			init(loginInfo) {
				// 加载数据
				console.log(this)
				store.dispatch("load").then(() => {
					// 初始化websocket
					this.initWebSocket(loginInfo);
				}).catch((e) => {
					console.log(e);
					this.quit();
				})
			},
			initWebSocket(loginInfo) {
				let userId = this.$store.state.userStore.userInfo.id;
				this.$wsApi.createWebSocket(process.env.WS_URL, loginInfo.accessToken);
				this.$wsApi.onopen(() => {
					this.pullUnreadMessage();
				});
				this.$wsApi.onmessage((cmd, msgInfo) => {
					if (cmd == 2) {
						// 异地登录，强制下线
						uni.showModal({
							content: '您已在其他地方登陆，将被强制下线',
							showCancel: false,
						})
						this.quit();
					} else if (cmd == 3) {
						// 标记这条消息是不是自己发的
						msgInfo.selfSend = userId == msgInfo.sendId;
						// 插入私聊消息
						this.handlePrivateMessage(msgInfo);
					} else if (cmd == 4) {
						// 标记这条消息是不是自己发的
						msgInfo.selfSend = userId == msgInfo.sendId;
						// 插入群聊消息
						this.handleGroupMessage(msgInfo);
					}
				})
			},
			pullUnreadMessage() {
				// 拉取未读私聊消息
				this.$http({
					url: "/message/private/pullUnreadMessage",
					method: 'POST'
				});
				// 拉取未读群聊消息
				this.$http({
					url: "/message/group/pullUnreadMessage",
					method: 'POST'
				});
			},
			handlePrivateMessage(msg) {
				let friendId = msg.selfSend ? msg.recvId : msg.sendId; 
				let friend = this.$store.state.friendStore.friends.find((f) => f.id == friendId);
				if (!friend) {
					this.$http({
						url: `/friend/find/${msg.sendId}`,
						method: 'GET'
					}).then((friend) => {
						this.insertPrivateMessage(friend, msg);
						this.$store.commit("addFriend", friend);
					})
				} else {
					// 好友列表不存在好友信息，则发请求获取好友信息
					this.insertPrivateMessage(friend, msg);
				}

			},
			insertPrivateMessage(friend, msg) {
				// webrtc 信令
				if (msg.type >= this.$enums.MESSAGE_TYPE.RTC_CALL &&
					msg.type <= this.$enums.MESSAGE_TYPE.RTC_CANDIDATE) {

					// // 呼叫
					// if (msg.type == this.$enums.MESSAGE_TYPE.RTC_CALL ||
					// 	msg.type == this.$enums.MESSAGE_TYPE.RTC_CANCEL) {
					// 	this.$store.commit("showVideoAcceptorBox", friend);
					// 	this.$refs.videoAcceptor.handleMessage(msg)
					// } else {
					// 	this.$refs.videoAcceptor.close()
					// 	this.$refs.privateVideo.handleMessage(msg)
					// }
					// return;
				}

				let chatInfo = {
					type: 'PRIVATE',
					targetId: friend.id,
					showName: friend.nickName,
					headImage: friend.headImage
				};
				// 打开会话
				this.$store.commit("openChat", chatInfo);
				// 插入消息
				this.$store.commit("insertMessage", msg);
				// 播放提示音
				!msg.selfSend && this.playAudioTip();

			},
			handleGroupMessage(msg) {
				let group = this.$store.state.groupStore.groups.find((g) => g.id == msg.groupId);
				if (!group) {
					this.$http({
						url: `/group/find/${msg.groupId}`,
						method: 'get'
					}).then((group) => {
						this.insertGroupMessage(group, msg);
						this.$store.commit("addGroup", group);
					})
				} else {
					// 群聊缓存存在，直接插入群聊消息
					this.insertGroupMessage(group, msg);
				}

			},
			insertGroupMessage(group, msg) {
				let chatInfo = {
					type: 'GROUP',
					targetId: group.id,
					showName: group.remark,
					headImage: group.headImageThumb
				};
				// 打开会话
				this.$store.commit("openChat", chatInfo);
				// 插入消息
				this.$store.commit("insertMessage", msg);
				// 播放提示音
				!msg.selfSend && this.playAudioTip();
			},
			quit() {
				this.$wsApi.closeWebSocket();
				uni.removeStorageSync("loginInfo");
				uni.navigateTo({
					url: "/pages/login/login"
				})
			},
			playAudioTip() {
				// 音频播放无法成功
				// this.audioTip = uni.createInnerAudioContext();
				// this.audioTip.src =  "/static/audio/tip.wav";
				// this.audioTip.play();
			}

		},
		onLaunch() {
			// 登录状态校验
			let loginInfo = uni.getStorageSync("loginInfo");
			if (loginInfo) {
				// 初始化
				this.init(loginInfo)
			}else{
				// 跳转到登录页
				uni.navigateTo({
					url:"/pages/login/login"
				})
			}
		}
	}
</script>

<style lang="scss">
	@import url('./static/icon/iconfont.css');
	
	.tab-page{
	    // #ifdef H5
		height: calc(100vh - 46px - 50px); // h5平台100vh是包含了顶部和底部，需要减去
		// #endif
		// #ifndef H5
		height: calc(100vh);    
		// #endif
		background-color: #f8f8f8;
	}
	
	.page{
	    // #ifdef H5
		height: calc(100vh - 45px); // h5平台100vh是包含了顶部，需要减去
		// #endif
		// #ifndef H5
		height: calc(100vh);    
		// #endif
		background-color: #f8f8f8;
	}
</style>