/*
 * bEnable:控制事件关联按钮的Enable/Disable true-Enable false-Disable 默认为0
 * layerID:记录layer弹出框的ID
 * processData:事件关联分析处理数据
 * 数据库PQS_EventDetail表数据更新：
 * 	1、未进行事件关联分析处理，触发定时器(1Min)，bEnable置为1并禁用事件关联按钮，定时任务完成后bEnable置为true，启用事件关联按钮；
 *  2、事件关联分析处理中，不去触发定时器，事件关联按钮状态也为Disable；
 */
var bEnable = true;
var layerID = -1;
var layerId = -1;
var processData = new Array();
var objTable = null;
var layer = null;

$("#interval").val("周");

layui.use(['layer'], function () {
    layer = layui.layer;
//    querySagEvents(0);
    startQuery();
});

/**
 * @param data
 * @returns 获取kfka推送消息并添加到dataTable表格中
 */
function getKfkaData(data) {
    disableBtn();
    if (objTable != null) {
        $.each(data, function (index, item) {
            objTable.row.add([item.eventdetail_index, '',
                item.timeid + '.' + item.ms, item.persisttime,
                item.eventvalue, item.gdname, item.bdname, item.pointname,
                "<div style='color:red'>未计算</div>", "<div style='color:red'>不存在</div>", '']);
        });
    }

    // 添加完成后需要draw才能出现效果
    objTable.draw();
}

/**
 * 设置暂降事件按钮状态
 */
function setBtnState(b, bQuery) {
    if (b) {
        $("#Aanalysis").removeProp("disabled");
    } else {
        $('#Aanalysis').prop('disabled', 'true');
    }

    if (bQuery) {
        timer = null;
    }
}

/**
 * 数据库webSocket推送数据到系统，如果高级分析页面打开，则禁用按钮60s
 *
 * @returns
 */
var timer = null;

function disableBtn() {
    setBtnState(false, false);

    if (timer != null) {
        clearTimeout(timer);
        timer = null;
    }

    /**
     * setTimeout第一个参数需要是编译的代码或者是一个函数方法，如果是函数名，则会立马执行，没有延迟效果
     */
    timer = setTimeout(function () {
        setBtnState(true, true);
    }, 300000);
}

/**
 * 获取暂降事件列表
 */

var it = null;
var lines = filterXSS($("#lineIndex").val());

function startQuery() {
    it = setInterval('refreshQuery()', 100);
}

function refreshQuery() {
    var width = $("#tableId").width();
    if (width > 100) {
        querySagEvents(0);
        window.clearInterval(it)
    }
}

function querySagEvents(b) {
    var startTime = $("#startTime").val();
    var endTime = $("#endTime").val();
    layer.ready(function () {
        layerId = layer.msg('数据加载中...', {
            icon: 16,
            shade: [0.5, '#f5f5f5'],
            scrollbar: false,
            time: 100000
        });

        if (lines == "") {
            $.ajax({
                type: 'POST',
                dataType: "json",
                data: {
                    queryCondition: JSON.stringify([]),
                    startTime: startTime,
                    endTime: endTime
                },
                url: '/pqs9200/advanced/querySagEvents',
                success: function (data) {
                    processSagData(data, 1, b);
                },
                error: function () {
                    layer.msg("暂降事件列表查询失败！");
                    CLOSE_LOAD_LAYER(layer, layerId);
                    bEnable = false;
                    setBtnState(bEnable, false);
                    objTable = initTableBtn($('#tableId'), [], 9);
                }
            });
        } else {
            var obj = new Object();
            var arr = [];
            obj.lineId = $("#lineIndex").val();
            arr.push(obj);
            $.ajax({
                type: 'POST',
                dataType: "json",
                data: {
                    queryCondition: JSON.stringify(arr)
                },
                url: '/pqs9200/advanced/querySagEventss',
                success: function (data) {
                    processSagData(data, 1, b);
                },
                error: function () {
                    layer.msg("暂降事件列表查询失败！");
                    CLOSE_LOAD_LAYER(layer, layerId);
                    bEnable = false;
                    setBtnState(bEnable, false);
                    objTable = initTableBtn($('#tableId'), [], 9);
                }
            });
            lines = null;
        }
    });
}

var dealTotal = 0;
var fileTotal = 0;

//处理暂降事件数据
function processSagData(data, type, b) {
    if (data.code != 0) {
        bEnable = false;
        objTable = initTableBtn($('#tableId'), data, 9);
        setBtnState(bEnable, false);

        if (type == 1) {
            CLOSE_LOAD_LAYER(layer, layerId);
        } else if (type == -1) {
            if (layerID != -1) {
                CLOSE_LOAD_LAYER(layer, layerID);
            }
        }

        return;
    }

    if (data.object.list.length == 0) {
        bEnable = false;
    } else {
        bEnable = true;
    }

    setBtnState(bEnable, false);

    var tableData = '';
    var offset = 0;
    processData = [];
    dealTotal = data.object.dealCount;
    fileTotal = data.object.fileCount;

    while (offset < data.object.list.length) {
        // 后台返回到前台的表格数据
        tableData += '["' + data.object.list[offset].indexEventDetail + '","'
            + '","' + data.object.list[offset].strTime + '","'
            + data.object.list[offset].strPersist + '","'
            + data.object.list[offset].strEventValue + '","'
            + data.object.list[offset].plantInfo.nameGD + '","'
            + data.object.list[offset].plantInfo.nameBD + '","'
            + data.object.list[offset].plantInfo.namePoint + '","';

        if (1 != data.object.list[offset].dealFlag) {
            tableData += "<div style='color:red'>"
                + data.object.list[offset].dealFlagDescription + '</div>","';
        } else {
            tableData += data.object.list[offset].dealFlagDescription + '","';
        }

        if (0 == data.object.list[offset].fileFlag) {
            tableData += "<div style='color:red'>"
                + data.object.list[offset].fileFlagDescription + '</div>","'
                + '' + '"],';
        } else {
            tableData += data.object.list[offset].fileFlagDescription + '","' + ''
                + '"],';
        }

        // 事件关联处理，传送到后台数据
        var obj = new Object();
        obj.indexPoint = data.object.list[offset].plantInfo.indexPoint;
        obj.sagType = data.object.list[offset].sagType;
        obj.sagReason = data.object.list[offset].sagReason;
        obj.msec = data.object.list[offset].msec;
        obj.strTime = data.object.list[offset].strTime;
        obj.time = data.object.list[offset].time;
        obj.sagTime = data.object.list[offset].sagTime;
        obj.nameGD = data.object.list[offset].plantInfo.nameGD;
        obj.nameBD = data.object.list[offset].plantInfo.nameBD;
        obj.namePoint = data.object.list[offset].plantInfo.namePoint;
        obj.firstTime = data.object.list[offset].firstTime;
        obj.firstMs = data.object.list[offset].firstMs;
        obj.firstType = data.object.list[offset].firstType;
        processData.push(obj);
        offset++;
    }

    //去除最右边',' string转json
    tableData = tableData.substring(0, tableData.lastIndexOf(','));
    tableData = eval('[' + tableData + ']');

    objTable = initTableBtn($('#tableId'), tableData, 9);

    if (b === 1) {
        judgeAdvanced();
    }

    if (type == 1) {
        CLOSE_LOAD_LAYER(layer, layerId);
    } else if (type == -1) {
        if (layerID != -1) {
            CLOSE_LOAD_LAYER(layer, layerID);
        }
    }
}

//行内按钮 obj:表格对象 tableData:表格数据 nIndex:按钮添加的列
function initTableBtn(obj, tableData, nIndex) {
    var $height = $("body").height() * 0.70;
    var height = $(window).height() - 155;
    var length = Math.floor(height / 28);
    if (length < 1) {
        length = 1;
    }
    var oTable = obj
        .DataTable({
            scrollX: true,
            columns: [
                {"width": "0%"},
                {"width": "5%"},
                {"width": "10%"},
                {"width": "8%"},
                {"width": "9%"},
                {"width": "8%"},
                {"width": "9%"},
                {"width": "9%"},
                {"width": "9%"},
                {"width": "8%"},
                {"width": "9%"}
            ],
            data: tableData,
            lengthChange: false,
            bDestroy: true,
            ordering: true,
            'searching': true,
            order: [[2, 'desc']],
            scrollY: $height,
            scrollCollapse: true,
            columnDefs: [{
                targets: [0],
                visible: false
            }, {
                targets: [1, 10],
                orderable: false
            }],
            pageLength: length,
            dom: 'lrt<<"myStyle"i><"myStyle"p>>',
            language: {
                "processing": "处理中...",
                "lengthMenu": "",
                "paginate": {
                    "first": "首页",
                    "previous": "上页",
                    "next": "下页",
                    "last": "末页"
                },
                "zeroRecords": "没有内容",
                "info": "共 _TOTAL_ 项记录，当前显示第 _PAGE_ 页",
                "infoEmpty": "共 0 项记录",
                "infoFiltered": "(由 _MAX_ 项结果过滤)",
                "sEmptyTable": "暂无新事件需关联处理"
            },
            createdRow: function (row, data, index) {
                if (data[9].indexOf('不存在') > 0) {
                    var $btnView = $('<button type="button" class="btn themeBGDisableColor btn-no">暂无波形</button>');
                    $('td', row).eq(nIndex).append($btnView);
                } else {
                    var $btnView = $('<button type="button" class="btn themeBGColor btn-view">波形分析</button>');
                    $('td', row).eq(nIndex).append($btnView);
                }

                if (data[5].length > 8) {
                    var realValue = data[5];
                    var s = data[5].substr(0, 8) + '...'
                    $('td', row).eq(4).prevObject[4].innerHTML = "<span title='" + realValue + "'>" + s + "</span>";
                }

                if (data[6].length > 8) {
                    var realValue = data[6];
                    var s = data[6].substr(0, 8) + '...'
                    $('td', row).eq(5).prevObject[5].innerHTML = "<span title='" + realValue + "'>" + s + "</span>";
                }

                if (data[7].length > 8) {
                    var realValue = data[7];
                    var s = data[7].substr(0, 8) + '...'
                    $('td', row).eq(6).prevObject[6].innerHTML = "<span title='" + realValue + "'>" + s + "</span>";
                }
            },
            fnDrawCallback: function (oTable) {
                $("#tableId_paginate")
                    .append(
                        "<div style='float:right;padding-top:4px;padding-left:10px'>到第 <input type='text' id='changePage' class='input-text' style='width:50px;height:28px;'> 页  <button class='btn btn-primary' id='dataTable-btn'>确定</button></div>");
                var table = $("#tableId").dataTable();
                $('#dataTable-btn')
                    .click(
                        function (e) {
                            if ($("#changePage").val()
                                && $("#changePage").val() > 0) {
                                var redirectpage = $("#changePage")
                                    .val() - 1;
                            } else {
                                var redirectpage = 0;
                            }
                            table.fnPageChange(redirectpage);
                        });
            }
        });

    oTable.on('draw.dt', function () {
        oTable.column(1, {
            draw: 'applied',
        }).nodes().each(function (cell, i) {
            cell.innerHTML = i + 1;
        });
    }).draw();

    return oTable;
}

/*******************************************************************************
 * 点击事件关联分析按钮发送ajax请求到后台处理事件关联
 * 处理完成后退出layer.msg提示并将事件关联分析按钮置为可用状态
 ********************************************************************************/
function onAanalysis() {
    bEnable = false;
    setBtnState(bEnable, false);
    processEvents();

    layerID = layer.msg('事件关联分析<Br\>&nbsp&nbsp&nbsp正在处理....', {
        icon: 16,
        shade: 0.01,
        time: 0
    }, function () {
        if (layerID != -1) {
            /*layer.open({
                type: 2,
                title: '暂降事件关联结果',
                maxmin: false,
                shadeClose: true, // 点击遮罩关闭层
                area: ['100%', '100%'],
                content: 'eventAnalysis',
                scrollbar: false,
                success: function (layero, index) {
                    $(layero).find("iframe")[0].contentWindow
                        .queryNormalizeData();
                }
            });*/
            layui.layer.open({
                type: 2,
                title: '归一化事件列表',
                maxmin: false,
                shadeClose: true, // 点击遮罩关闭层
                area: ['100%', '100%'],
                content: 'relevanceresult',
                scrollbar: false
            });
        }
    });
}

/*********************************************************************************
 * 高级分析按钮点击事件
 * 刷新表格数据
 * 先判断表中事件是否都经过高级算法处理
 * 然后根据判断结果进行归一化处理或其他处理
 ********************************************************************************/
function btnClick() {
    querySagEvents(1);
}

/*********************************************************************************
 * 增加判断:暂降事件是否都已经过高级算法处理
 * 已处理：调用归一化算法进行事件关联分析处理
 * 未处理：弹框提示，是否继续处理
 * 1、继续处理：与已处理逻辑相同进行处理
 * 2、停止:刷新表格数据，与数据库事件状态保持一致
 ********************************************************************************/
function judgeAdvanced() {
    if (dealTotal > 0 || fileTotal > 0) {
        layer.confirm(
            '<strong style="color:red">' + '波形记录不存在:' + fileTotal + '条'
            + '<br>' + '未计算暂降特征值:' + dealTotal + '条'
            + '<br>是否继续进行归一化处理?</strong>',
            {
                btn: ['继续', '退出'], // 按钮
                skin: 'layui-layer-molv', // 样式类名
                title: '提示信息',
                closeBtn: 0
            }, function () {
                //点击继续按钮：进行归一化处理
                onAanalysis();
            }, function () {
                /**************************************************************************************
                 * 点击退出按钮：更新表格数据，推送的事件加载在表头且默认未经高级算法处理，
                 * 事件状态可能与数据库不一致，此时更新数据保持状态一致
                 *************************************************************************************/
            });
    } else {
        onAanalysis();
    }
}

/*
 * 处理暂降事件 处理的数据只需关注lineID，timeID，MS
 */
function processEvents() {
    $.ajax({
        type: 'POST',
        dataType: "json",
        data: {
            arrayList: JSON.stringify(processData)
        },
        url: '/pqs9200/advanced/processEvents',
        success: function (data) {
            if (data === 0) {
                objTable.clear(0); // 清空表中数据
                processSagData(data, -1, 0);
            } else if (data === 1) {
                if (layerID != -1) {
                    CLOSE_LOAD_LAYER(layer, layerID);
                }

                layerID = -1;
                layer.msg("暂降事件关联分析失败<br/>请确保redis有变压器信息缓存");
                bEnable = true;
                setBtnState(bEnable, false);
            }
        },
        error: function () {
            if (layerID != -1) {
                CLOSE_LOAD_LAYER(layer, layerID);
            }

            layerID = -1;
            layer.msg("暂降事件关联分析失败<br/>请确保redis有变压器信息缓存");
            bEnable = true;
            setBtnState(bEnable, false);
        }
    });
}

function viewWave(eventIndex) {
    layer.open({
        type: 2,
        title: '波形分析',
        maxmin: false,
        shadeClose: true, // 点击遮罩关闭层
        area: ['100%', '100%'],
        content: 'vdwaveform?eventIndex=' + eventIndex,
        scrollbar: false
    });
}

/*
 * 按钮查询事件
 */
function search() {
    startQuery();
}

/*
 * 点击波形分析按钮
 */
$('#tableId').on("click", ".btn-view", function () {
    if (objTable != null) {
        var item = objTable.row($(this).closest('tr')).data();
        viewWave(item[0]);
    }
});

function processBtnClick() {
    layer.open({
        type: 2,
        title: '分析记录管理',
        maxmin: false,
        shadeClose: true, // 点击遮罩关闭层
        area: ['100%', '100%'],
        content: 'processEvent',
        scrollbar: false
    });
}

//搜索框内容改变结果记录
function valueChange(value) {
    objTable.search(value).draw();
}
