$(document).ready(function () {
    if (window.top != window.self) {
        window.top.location.href = "/sso";
    }
});

var timeInter = null;  //用于暂降发生时语音提示的循环播放
var alarmYinCount = 0; //提示音序号
const yuYinFlag = false;  //是否在暂降发生时发出语言告警
/**************************************
 * 处理webSocket，缓存连接在redis中
 * 后台开启webSocket是否需根据用户权限，缓存不同用户到不同用户组中
 * 根据不同的用户组广播不同用户信息
 *************************************/
var timer;
var em = 0;
var datalength = 0;
var da = [];
var scrnum = 0;
var scrlength = 0;
var ii;
var eventlist = [];

window.speechSynthesis.cancel()
console.log(window.speechSynthesis)
const synthQ = window.speechSynthesis


var webSocketURL = '';
var userName;

$(document).ready(
    function () {
        var role = $("input[name='role']").val();//获取角色信息
        userName = document.getElementById("user_name").value;//获取登录用户名

        // 读取配置文件获取配置的websocket URL地址信息，使用ajax的同步请求方式

        try {
            $.ajax({
                type: "POST",
                async: false,
                url: "/pqs9200/business/getWebsocketURL",
                dataType: "text",
                success: function (data) {
                    webSocketURL = data;
                }
            });
        } catch (e) {
            layer.msg("获取websSocket地址信息错误，请联系管理员!");
        }

        if (role != "sys" && role != "sj" && role != "sh") {


            //根据角色去控制【终端异常】和【暂降事件】
            rundevice();
            runevent();
            //websSocket相关操作
            webSocketInit(webSocketURL,userName);
        }
    });


var limitConnect = 3;  // 断线重连次数
var timeConnect =0;

// 重连
function reconnect() {
    // lockReconnect加锁，防止onclose、onerror两次重连
    if(limitConnect>0){
        limitConnect --;
        timeConnect ++;
        console.log("第"+timeConnect+"次重连");
        // 进行重连
        setTimeout(function(){
            webSocketInit();
        },2000);

    }else{
        console.log("TCP连接已超时");
    }
}


// 心跳 * 回应
setInterval(function () {
    if(webSocket){
        webSocket.send('');
    }
}, 1000 * 100)


//socket初始化
var webSocket
function webSocketInit() {
    webSocket = new WebSocket(webSocketURL + userName);
    webSocket.onerror = function (event) {
        layer.msg("websSocket错误信息:" + event.data);
        console.log('webSocket出错。。。。。。');
    }
    webSocket.onopen = function () {
        layer.msg("webSocket连接成功!", {time: 404});
        console.log('webSocket连接成功');
    }
    webSocket.onclose = function () {
        webSocket.close();
        layer.msg("webSocket关闭!");
        console.log('服务器已经断开');
        reconnect(webSocketURL,userName);
    }
    webSocket.onmessage = function (event) {


        /************************************
         * 1、执行事件关联分析
         * ※ msgId : 1
         * ※ msgBody : update
         ************************************
         * 2、有影响的界面
         * ※ 关联结果分析
         * ※ 暂降影响范围分析
         * ※ 多地理信息地图与电网拓扑图
         * ※ 监测点导航界面
         * ※ 发生暂降事件滚动提示
         *********************************/
        if (JSON.parse(event.data).msgId == 1 && JSON.parse(event.data).msgBody == 'update') {
            //关联结果分析
            if (document.getElementById('eventscompare') != null) {
                document.getElementById('eventscompare').contentWindow.startQuery();
            }

            //暂降影响范围分析
            if (document.getElementById('range') != null) {
                document.getElementById('range').contentWindow.startQuery();
            }

            // 地理信息地图刷新
            if (document.getElementById('glindex') != null) {
                //无法确定具体数目，得强行刷新（true:强行刷新     false:）
                document.getElementById('glindex').contentWindow.refreshDatabaseMap(true);
            }

            // 监测点地理信息地图刷新
            if (document.getElementById('monitor') != null) {
                //无法确定具体数目，得强行刷新（true:强行刷新     false:）
                document.getElementById('monitor').contentWindow.refreshDatabaseMap(true);
            }

            // 发生暂降事件滚动提示
            runevent();
        }

        /************************************
         * 1、归一化事件中新增、删除事件
         * ※ msgId : 3
         * ※ msgBody : update
         ************************************
         * 2、有影响的界面
         * ※ 关联结果分析
         * ※ 暂降影响范围分析
         * ※ 多地理信息地图与电网拓扑图
         * ※ 监测点导航界面
         * ※ 发生暂降事件滚动提示
         *********************************/
        if (JSON.parse(event.data).msgId == 3 && JSON.parse(event.data).msgBody == 'update') {
            if (document.getElementById('range') != null) {
                document.getElementById('range').contentWindow.startQuery();
            }

            if (document.getElementById('eventscompare') != null) {
                document.getElementById('eventscompare').contentWindow.startQuery();
            }

            if (document.getElementById('relevance') != null) {
                document.getElementById('relevance').contentWindow.startQuery();
            }

            // 地理信息地图刷新
            if (document.getElementById('glindex') != null) {
                //无法确定具体数目，得强行刷新（true:强行刷新     false:）
                document.getElementById('glindex').contentWindow.refreshDatabaseMap(true);
            }

            // 监测点地理信息地图刷新
            if (document.getElementById('monitor') != null) {
                //无法确定具体数目，得强行刷新（true:强行刷新     false:）
                document.getElementById('monitor').contentWindow.refreshDatabaseMap(true);
            }

            // 发生暂降事件滚动提示
            runevent();
        }
        if (JSON.parse(event.data).msgId == 2 && JSON.parse(event.data).msgBody == 'insert') {
            if (document.getElementById('relevance') != null) {
                document.getElementById('relevance').contentWindow.getKfkaData(JSON.parse(event.data).msgbody);
            }


            if ($("#scroll").text() == '暂无暂降事件') {
                $("#scroll").text("");
            }
            // 接收kfka数据 暂降事件
            $("#scroll").empty();

            datalength = JSON.parse(event.data).msgbody.length;
            //数据解析


            //yuyin(synthQ,msgQ,msg);
            $.each(JSON.parse(event.data).msgbody, function (index, item) {

                da.push({timeid: item.timeid, pointname: item.pointname});
                getZd(da);


                eventlist.push({
                    bdname: item.bdname,
                    pointname: item.pointname,
                    timeid: item.timeid + "." + item.ms,
                    eventvalue: item.eventvalue,
                    persisttime: item.persisttime,
                    eventIndex: item.eventdetail_index
                });
            });




            if (zjsjId != null) {
                zjsjId.getKfkaData(JSON.parse(event.data).msgbody);
            }
            eventTip();

            /*暂降发生语言提示*/

            if (yuYinFlag) {
                console.log("下标索引"+alarmYinCount)
                let tem = eventlist[alarmYinCount].bdname + eventlist[alarmYinCount].pointname + "发生暂态事件,特征幅值百分之" + eventlist[alarmYinCount].eventvalue + ",持续时间" + Number(eventlist[alarmYinCount].persisttime).toFixed(3) + "秒"
                if (timeInter == null || timeInter == undefined) {
                    let msgQ = new SpeechSynthesisUtterance()
                    msgQ.text = tem
                    msgQ.onerror = function (msg) {
                        console.log(msg)
                    }
                    yuyin(synthQ, msgQ)
                    timeInter = window.setInterval(function () {
                        if (alarmYinCount >= eventlist.length) {
                            alarmYinCount = 0;
                        }
                        let temMsg = eventlist[alarmYinCount].bdname + eventlist[alarmYinCount].pointname + "发生暂态事件,特征幅值百分之" + eventlist[alarmYinCount].eventvalue + ",持续时间" + Number(eventlist[alarmYinCount].persisttime).toFixed(3) + "秒"

                        let msgQ = new SpeechSynthesisUtterance()
                        msgQ.text = temMsg
                        msgQ.onerror = function (msg) {
                            console.log(msg)
                        }
                        yuyin(synthQ, msgQ)
                        alarmYinCount++

                    }, 12000)
                }

            }

        }
        // 接收kfka数据 终端通讯状态
        if (JSON.parse(event.data).msgId == 4 && JSON.parse(event.data).msgBody == 'update') {
            for (var i = 0; i < JSON.parse(event.data).msgbody.length; i++) {
                var devIndex = JSON.parse(event.data).msgbody[i].deviceID;
                var state = JSON.parse(event.data).msgbody[i].comState;
                var j = 0;
                $.ajax({
                    async: false,
                    type: "POST",
                    url: "/pqs9200/device/selState",
                    data: {devIndex: devIndex},
                    success: function (data) {
                        if (data[0].devIndex = devIndex && data[0].status == state) {
                            em = em;
                        } else if (data[0].devIndex = devIndex && data[0].status != state) {
                            if (state == 0) {
                                em += 1;
                                $(".em").text(em + "台");
                                if (layuiId != null) {
                                    layuiId.getKfkaData(JSON.parse(event.data).msgbody[i]);
                                }
                            } else {
                                em -= 1;
                                if (em < 0) {
                                    em = 0;
                                }
                                $(".em").text(em + "台");
                                if (layuiId != null) {
                                    layuiId.getKfkaData(JSON.parse(event.data).msgbody[i]);
                                }
                            }
                        }
                    }
                })
            }

            // 地理信息地图刷新
            if (document.getElementById('glindex') != null) {
                document.getElementById('glindex').contentWindow.refreshDevice(JSON.parse(event.data).msgbody);
            }

            // 监测点地理信息地图刷新
            if (document.getElementById('monitor') != null) {
                document.getElementById('monitor').contentWindow.refreshDevice(JSON.parse(event.data).msgbody);
                document.getElementById('monitor').contentWindow.updateIcon(JSON.parse(event.data).msgbody);
                document.getElementById('monitor').contentWindow.refreshState(JSON.parse(event.data).msgbody);
            }
        }
    }
}


function yuyin(synthQ, msgQ) {

    synthQ.speak(msgQ);

    console.log(msgQ.text)
}

/*
 * 主业务页面打开各个模块的页面 ***** *****
 */
var tabs;
$(function () {
    $('#rightContent').width(document.body.clientWidth - 290).height(document.body.offsetHeight - 115);
    tabs = $('#tabs').cleverTabs();
    $(window).bind('resize',
        function () {
            tabs.resizePanelContainer();
            $('#rightContent').width(document.body.clientWidth - $('#left-menu').width() - 35).height(document.body.offsetHeight - 115);
        });

    if (getRole("/pqs9200/business/glindex") == 1) {
        addTab('glindex', '概览');
    } else if (getRole("/pqs9200/business/monitor") == 1) {
        addMonitorTab();
    } else if (getRole("/pqs9200/business/general") == 1) {
        addTab('general', '区域概览');
    } else if (getRole("/pqs9200/business/areastatistics") == 1) {
        addTab('areastatistics', '区域统计');
    } else if (getRole("/pqs9200/business/vdlist") == 1) {
        addTab('vdlist', '区域暂降列表');
    } else if (getRole("/pqs9200/business/balancearea") == 1) {
        addTab('balancearea', '区域暂降评估');
    } else if (getRole("/pqs9200/business/level") == 1) {
        addTab('level', '区域严重度');
    } else if (getRole("/pqs9200/business/relevance") == 1) {
        addTab('relevance', '事件关联分析');
    } else if (getRole("/pqs9200/business/range") == 1) {
        addTab('range', '影响范围分析');
    } else if (getRole("/pqs9200/business/eventscompare") == 1) {
        addTab('eventscompare', '事件波形分析');
    } else if (getRole("/pqs9200/business/runtime") == 1) {
        addTab('runtime', '终端运行管理');
    } else if (getRole("/pqs9200/business/runtimestatus") == 1) {
        addTab('runtimestatus', '终端运行统计');
    } else if (getRole("/pqs9200/business/onlinerate") == 1) {
        addTab('onlinerate', '终端在线率');
    } else if (getRole("/pqs9200/business/weeklyreport") == 1) {
        addTab('weeklyreport', '周报');
    } else if (getRole("/pqs9200/business/report") == 1) {
        addTab('report', '监测点报告');
    } else if (getRole("/pqs9200/business/areareport") == 1) {
        addTab('areareport', '区域报告');
    } else if (getRole("/pqs9200/business/sourcemanage") == 1) {
        addTab('sourcemanage', '资源管理');
    }

    $('#left-menu').remove();
    $('#rightContent').width(
        document.body.clientWidth - $('#left-menu').width() - 35).height(
        document.body.offsetHeight - 100).css({
        'left': '15px',
        'right': '20px'
    });
});

// 新增tab页
function addTab(url, label) {
    tabs.add({url: url, label: label});
    if (url == 'jcd.html') {
        $('#left-menu').remove();
        $('#rightContent').width(
            document.body.clientWidth - $('#left-menu').width() - 35)
            .height(document.body.offsetHeight - 115).css({
            'left': '15px',
            'right': '20px'
        });
    }
}

/*
 * 主页面中其他功能如： 用户登出等
 */
$('.menu-slidedown').find('li').click(function () {
    $(this).addClass('hover').siblings().removeClass('hover');
    $(this).parents('.menu-con').siblings().find('li').removeClass('hover');
})
$('.menu-con').find('.menu-hd').click(function () {
    var menucon = $(this).parents('.menu-con');
    if (menucon.hasClass('hover')) {
        menucon.removeClass('hover');
    } else {
        menucon.addClass('hover').siblings('.menu-con').removeClass('hover')
    }
})

$("#destory").click(function () {
    layer.confirm('确定退出吗？', {
        btn: ['确定', '取消']
    }, function (index) {
        location.href = '/pqs9200/user/loginout';
        layer.close(index)
    });
});

///登录用户详情及修改密码
$("#selectUserUpdatePass").click(function () {
    var userIndex = document.getElementById("user_index").value.split("/")[0];
    layer.open({
        type: 2,
        title: '用户详情',
        maxmin: false,
        shadeClose: true, // 点击遮罩关闭层
        area: ['35%', '32%'],
        content: 'userDetail?userIndex='
            + userIndex,
        scrollbar: false
    });
});

/**************************
 * 获取监测点事件
 * blflag  是否强制读取数据
 * true:强制读取
 * false:只要数据存在就不去读取
 **************************/
var resultdataarr = null;

function getLineMaps(blFlag, asy) {
    var info;
    if (blFlag) {
        $.ajax({
            type: "POST",
            async: asy,
            url: "/pqs9200/overview/getLineMaps",
            dataType: "text",
            success: function (data) {
                info = $.parseJSON(data);
                if (info != null) {
                    //取数据失败，则进行不进行操作
                    if (info.code == 500) {
                        parent.layer.msg(info.message, {icon: 5, time: 2000});
                    } else {
                        if (info.body != null) {
                            resultdataarr = null;
                            //开始遍历所有的数据,这里最终是Map,由key和value组成的
                            resultdataarr = getDataOffset(info.body);
                        }
                    }
                }
            }
        });
    } else {
        if (resultdataarr == null) {
            $.ajax({
                type: "POST",
                async: asy,
                url: "/pqs9200/overview/getLineMaps",
                dataType: "text",
                success: function (data) {
                    info = $.parseJSON(data);
                    if (info != null) {
                        //取数据失败，则进行不进行操作
                        if (info.code == 500) {
                            parent.layer.msg(info.message, {icon: 5, time: 2000});
                        } else {
                            if (info.body != null) {
                                resultdataarr = null;
                                //开始遍历所有的数据,这里最终是Map,由key和value组成的
                                resultdataarr = getDataOffset(info.body);
                            }
                        }
                    }
                }
            });
        }
    }

    return resultdataarr;
}

/*******************************************************************************
 * 打开暂降事件
 ******************************************************************************/
var zjsjVar = null;
var zjsjId = null;

function onWaring() {
    if (zjsjVar != null) {
        layer.msg("暂无暂降事件", {
            icon: 5,
            time: 1000
        })
    } else {
        layer.open({
            type: 2,
            title: false,
            area: [window.screen.width, '200px'],
            offset: 'rb',
            content: ['zjsj', 'no'],
            shadeClose: true,
            yes: function () {
                layer.closeAll();
            },
            success: function (layero, index) {
                zjsjId = $(layero).find("iframe")[0].contentWindow;
            }
        });
    }
}

//关闭告警语音提醒
function closeWarn() {
    synthQ.cancel()
    if (timeInter) {
        window.clearInterval(timeInter)
        timeInter = null;
    }
    alarmYinCount = 0
}

/*************************************
 * 打开终端状态
 *************************************/
var layuiId = null;

function onDevice() {
    if ($(".em").text() == "0台") {
        layer.msg("暂无终端异常", {
            icon: 5,
            time: 1000
        })
    } else {
        layer.open({
            type: 2,
            title: false,
            area: [window.screen.width, '200px'],
            offset: 'rb',
            content: ['sbyc', 'no'],
            shadeClose: true,
            background: '#333322',
            yes: function () {
                layer.closeAll();
            },
            success: function (layero, index) {
                layuiId = $(layero).find("iframe")[0].contentWindow;
            }
        });
    }
}

var length = 0;
var num = 0;

function goLeft() {
    // 750是根据你给的尺寸，可变的
    if (num == length) {
        num = 0;
    }
    num -= 1;
    $(".scroll").css({
        left: num
    })
}

/*****************************************
 * 暂降事件获取kafka的数据
 ****************************************/
function getZd(da) {
    for (var i = 0; i < da.length; i++) {
        var option = $("<li>"
            + "<font color='#f0ad4e'>"
            + da[i].timeid
            + "    "
            + da[i].pointname
            + "</font>"
            + "</li>");
        $("#scroll").append(option);
    }
    scrlength = 100 - da.length * 150;

    function scrLeft() {
        // 750是根据你给的尺寸，可变的
        if (scrnum == scrlength) {
            scrnum = 0;
        }
        scrnum -= 1;
        $(".scroll").css({
            left: scrnum
        })
    }

    // 设置滚动速度
    //timer = setInterval(scrLeft, 20);
}

/******************************************
 * 获取暂降事件滚动事件
 *******************************************/
function runevent() {
    $.ajax({
        method: "post",
        url: "/pqs9200/area/getrunevent",
        data: "",
        success: function (data) {
            // 没有权限的请求
            if (data == 300) {
                location.href = '/pqs9200/auth/unauthorized';
                // 没有登陆的请求
            } else if (data == 301) {
                location.href = '/pqs9200';
            } else {
                if (data.code != 200) {
                    zjsjVar = 0;
                    clearInterval(timer);
                    $(".scroll").css({
                        left: 0
                    });
                    $("#scroll").text("暂无暂降事件");
                } else {
                    $("#scroll").empty();
                    for (var i = 0; i < data.body.length; i++) {
                        var option = $("<li>" + "<font color='#f0ad4e'>"
                            + "&nbsp;" + data.body[i][1] + " " + data.body[i][0]
                            + "</font> &nbsp;" + "</li>");
                        $("#scroll").append(option);
                    }
                    var len = data.body.length;
                    length = 100 - len * 150;
                    // 设置滚动速度
                    timer = setInterval(goLeft, 20);

                }
                // $("#lin").text(cm);

            }
        }

    });
}

/***************************************
 * 获取终端状态滚动事件
 ****************************************/
function rundevice() {
    $.ajax({
        method: "post",
        url: "/pqs9200/device/getTj",
        data: "",
        success: function (data) {
            if (data == "") {
                em = 0;
            } else {
                em = data[0].yAxis;
            }
            $(".em").text(em + "台");
        }
    });
}

//弹窗提示暂降事件
function eventTip() {
    layer.close(ii);
    ii = layer.open({
        type: 2,
        title: false,
        anim: 2,
        area: ['50%', '250px'],
        offset: 'lb',
        scrollbar: false,
        content: 'tipwindow',
        shadeClose: false,
        shade: false,
        yes: function () {
            layer.closeAll();
        },
        cancel: function (index, layero) {
            eventlist = [];
            closeWarn()
        },
        success: function (layero, index) {
        }
    });
}

/***************************************
 * 监测点打开
 ****************************************/
function addMonitorTab() {
    var dataPoint = $("#dataPoint").val();
    addTab(dataPoint, '监测点');
}

/***************************************
 * 终端运行管理打开
 ****************************************/
function addRuntimeTab() {
    var run_Index = $("#run_Index").val();
    if (window.top.document.getElementById(run_Index) != null || window.top.document.getElementById('manage') != null) {

    } else {
        addTab('runtime', '终端运行管理');
    }
}

/***************************************
 * 鼠标悬停
 ****************************************/
$('#scroll').hover(function () {
    clearInterval(timer);
}, function () {
    timer = setInterval(goLeft, 20);
});
