import {
	API_URL,
	API_ROOT,
	UNIACID
} from '@/common/request/request';
import store from "@/common/store";
//是否已经连接上ws
let isOpenSocket = false
//心跳间隔，单位毫秒
let heartBeatDelay = 10000
let heartBeatInterval = null
//心跳时发送的消息文本
let heartBeatText = "PING"
//最大重连次数
let reconnectTimes = 10
let reconnectInterval = null
//重连间隔，单位毫秒
let reconnectDelay = 5000
 
 var url = API_ROOT;
 
 var domain = url.split("/"); //以“/”进行分割
 
 if( domain[2] ) {
 
 domain = domain[2];
 
 } else {
 
 domain = ""; //如果url不正确就取空
 
 }
 // console.log("wss://"+domain+":8288");
//let wsUrl = "wss://faraway.wike.cc/wss" //ws请求  或者  wss
let wsUrl = [{url:'wss://away.wike.cc/wss'},{url:'wss://faraway.wike.cc/wss'}];
let socketTask = null
 
//这个参数是防止重连失败之后onClose方法会重复执行reconnect方法，导致重连定时器出问题
//连接并打开之后可重连，且只执行重连方法一次
let canReconnect = false
 
//封装的对象，最后以模块化向外暴露，
//init方法 初始化socketTask对象
//completeClose方法 完全将socketTask关闭（不重连）
//其他关于socketTask的方法与uniapp的socketTask api一致
let ws = {
    socketTask: null,
    init,
    completeClose,
    send,
	socketStatus
	}
 
function init(s) {
	let u = wsUrl[uni.$u.random(0, 1)].url;
	// if(store.getters.appInfo && store.getters.appInfo.connect_lines){
	// 	if(store.getters.appInfo.connect_lines == 2){
	// 		wsUrl = "wss://faraway.wike.cc/wss" 
	// 	}
	// }
    socketTask = uni.connectSocket({
        url: u,
        complete: (res)=> {console.log("WebSocket连接成功",res,u)}
    })
    socketTask.onOpen((res) => {
        console.log("WebSocket连接已打开",res)
        clearInterval(heartBeatInterval)
        clearInterval(reconnectInterval)
        isOpenSocket = true
        canReconnect = true
		
        //开启心跳机制  向websocket发送数据，json格式，参数：sceneId
        // heartBeat()
    })
    socketTask.onMessage((res) => {
        // 每次返回的数据不一样,需要加入判断
        // console.log('收到服务器内容',JSON.parse(res.data))
//         let result = JSON.parse(res.data)
// 　　　　 //这边可以根据推送的数据, 做相应的 do somethings, 根据自己需求, 下面只是例子..
//         // token存在,说明,小程序用户点击了授权(比如推送的数据有token,那就做什么事xxxx
// 		send('{"state":"bind","fromid":"' + store.getters.userInfo.id + '"}')
		
// 		if(result.state == 'new_content'){
// 			uni.vibrateLong({
// 				success: function () {
// 					// console.log('success');
// 				}
// 			});
// 			uni.showTabBarRedDot({
// 				index:2
// 			})
// 		}
        // if(result.token){
        //     uni.setStorageSync('token', result.token)
        //     uni.setStorageSync('userInfo', JSON.stringify(result.userInfo))
        // }
        // client_id存在,说明连websocket接成功
        // if(result.msg=="连接成功"){
        //     uni.setStorageSync('client_id', result.data.client_id);
        // }
        // JSON.parse(res.data).msg=="已归还导览机", 已归还导览机,清空用户缓存
        // if(result.msg=="已归还导览机"){
            
        //     uni.clearStorageSync();
        //     uni.navigateBack({
        //         delta: 100
        //     })
        // }
 
    })
    socketTask.onClose(() => {
		// console.log(isOpenSocket);
        if(isOpenSocket){
            console.log("ws与服务器断开")
        }else{
            console.log("连接失败")
        }
        isOpenSocket = false
        if(canReconnect){
            reconnect()
            canReconnect = false
        }
		
    })
    ws.socketTask = socketTask
}

function socketStatus() {
	return isOpenSocket;
} 
 
function heartBeat() {
    heartBeatInterval = setInterval(() => {
        // console.log(heartBeatText)
        uni.getSystemInfo({
            success: function (res) {
                //console.log('设备id----',res.deviceId);//设备id
                uni.setStorageSync('deviceId', res.deviceId)
                let obj = {
                    sceneId:res.deviceId
                }
                send(JSON.stringify(obj));
            }
        });
 
    }, heartBeatDelay)
}
 
// 发送消息
function send(value) {
    ws.socketTask.send({
        data: value,
        async success(res) {
            // console.log("消息发送成功",res,value)
        }
    });
}
function reconnect() {
    //停止发送心跳
    clearInterval(heartBeatInterval)
    //如果不是人为关闭的话，进行重连
    if (!isOpenSocket) {
        let count = 0;
        // reconnectInterval = setInterval(() => {
            console.log("正在尝试重连")
            init();
            count++
            //重连一定次数后就不再重连
            if(count >= reconnectTimes){
                // clearInterval(reconnectInterval)
                console.log("网络异常或服务器错误")
            }
        // }, reconnectDelay)
    }
}
function completeClose(){
    //先将心跳与重连的定时器清除
	console.log('停止连接');
    clearInterval(heartBeatInterval)
    clearInterval(reconnectInterval)
    canReconnect = false
    ws.socketTask.close()
}
 
module.exports = ws