import $store from '@/store/index.js';
import {
	registerList,
} from '@/api/consult.js'
class common {
	constructor(arg) {
		this.timer = null
		this.url = arg.url
		this.isOnline = false //是否在线
		this.socket = null //socket对象
		this.reconnectTime = 0
		this.isOpenReconnect = true //是否重连
		this.loadFinish = false;
		// 获取当前用户相关信息
		let user = uni.getStorageSync('userInfo')
		this.user_token = uni.getStorageSync('token')
		this.user = user ? user : {}
		// 初始化聊天对象
		this.TO = false;
		// 连接和监听
		if (this.user) {
			this.connectSocket()
		}
	}
	// 断线重连
	reconnect() {
		console.log(this.isOnline)
		console.log("进入reconnect准备重新链接")
		if (this.isOnline) {
			return
		}
		if (this.reconnectTime >= 3) {
			return this.reconnectConfirm()
		}
		this.reconnectTime += 1
		console.log("重新链接")
		// this.connectSocket();

	}
	// 连接socket
	connectSocket() {
		console.log("链接connectSocket")
		this.socket = uni.connectSocket({
			url: this.url,
			header: {
				authorization: `Bearer ${uni.getStorageSync('token')}`
			},
			method: 'POST',
			complete: () => {}
		})
		// 监听连接成功
		this.socket.onOpen && this.socket.onOpen(() => this.onOpen())
		// 监听接收信息
		this.socket.onMessage && this.socket.onMessage((res) => this.onMessage(res))
		// 监听断开
		this.socket.onClose && this.socket.onClose((e) => this.onClose(e))
		// 监听错误
		this.socket.onError && this.socket.onError(() => this.onError())
	}
	onOpen() {
		// 用户上线
		console.log('websocket连接成功')
		this.isOnline = true
		this.isOpenReconnect = true
		console.log(this.url, 'doctor');
		console.log(this.user, 'user')
		// 获取用户离线消息
		if (this.socket != null) {
			var login = {
				cmd: 'login',
				userId: Number(this.user.su_id),
				imStatus: Number(this.user.im_status),
				userType: Number(this.user.role),
				data: ''
			};
			this.initSocketLogin(login);
		}
	}
	// 监听关闭
	onClose(e) {
		// 用户下线
		this.isOnline = false
		this.socket = null
		console.log('socket连接已关闭：' + e)
		if (this.isOpenReconnect) {
			var that = this;
			setTimeout(function() {
				that.reconnect();
			}, 3000);
		}
	}
	// 监听连接错误
	onError() {
		// 用户下线
		this.isOnline = false
		this.socket = null
		console.log('socket连接错误：' + e)
		if (!this.socket) {
			var that = this;
			setTimeout(function() {
				that.reconnect();
			}, 3000);
		}
	}
	// 监听接收消息
	onMessage(data) {
		console.log('监听接收消息:' + data);
		// let res = JSON.parse(data.data)
		// uni.$emit('onMessage', res)
	}
	// 关闭连接
	close() {
		if (this.socket) {
			this.socket.close()
			this.isOpenReconnect = false
		} else if (uni.onSocketClose) {
			uni.onSocketClose()
			this.isOpenReconnect = false
		}
		this.destoryChatObject();
	}
	initSocketLogin(login) {
		this.socket.send({
			data: JSON.stringify(login),
			success() {
				console.log('用户IM登录成功:success')
			},
			fail(e) {
				console.log('用户IM登录失败fail:' + e)
			}
		})
		// setTimeout(() => {
		// 	this.socket.send({
		// 		data: JSON.stringify({
		// 			data: '发送内容是：测试测试测试',
		// 		}),
		// 	})
		// }, 4000)
	}
	// 创建聊天对象
	createChatObject(detail) {
		this.TO = detail
	}
	// 销毁聊天对象
	destoryChatObject() {
		this.TO = false
	}
	// 断线重连提示
	reconnectConfirm() {
		// this.close()
		// this.connectSocket()
		// this.reconnectTime = 0
	}
	// 验证是否上线
	checkOnline() {
		if (!this.isOnline) {
			// 断线重连提示
			this.reconnectConfirm()
			return false
		}
		return true
	}
}
export default common
