var prId = -1;
var initDdNumberCallbackCount = 0;
var hasLoaded = false;//标记是否已经加载过调度号

var varTypes = {
  "AI" : 1,
  "DI" : 2
};

var varTypesName = {
  1 : "AI",
  2 : "DI"
};

var filterResult = {
    locName: "高压侧",
    ctValue: "1",
    ddNumber: "201",
    varType: varTypes.AI,
    varTypeName: "遥测"
};


var ctValueAndDdNumbersMap = { AI: {}, DI: {} };

/**
 * 根据id清空所有子元素
 */
function clearAllChildren(id) {
    var tobeRemoved = $("#" + id);
    tobeRemoved.empty();
}

/**
 * 为单选按钮绑定事件
 */
function bindSwitchButtonEvent(buttons) {
    for (var i = 0; i < buttons.length; i++) {
        var btn = $(buttons[i]);
        btn.on('touchend', switchButtonClicked);
    }
}

/**
 * 单选按钮被点击
 */
function switchButtonClicked() {
    var sender = $(this);
    var brothers = sender.parent().children();
    for (var i = 0; i < brothers.length; i++) {
        var inputElement = $(brothers[i]);
        inputElement.attr('class', 'btn');
    }
    sender.attr('class', 'btn btn-highlight');

    var groupName = sender.attr('group');
    switch (groupName) {
        case "loc":
            locationButton_clicked(sender);
            break;
        case "ddNumber":
            ddNumberButton_clicked(sender);
            break;
        case "type":
            typeButton_clicked(sender);
            break;
        default:
            break;
    }
}

/**
 * 用户点击了位置按钮中的一个
 */
function locationButton_clicked(locButton) {
    filterResult.locName = locButton.attr("value");
    filterResult.ctValue = locButton.attr("ctvalue");
    updateDdNumberView();
}

/**
 * 用户点击了调度号中的一个
 */
function ddNumberButton_clicked(ddButton) {
    filterResult.ddNumber = ddButton.attr("value");
}

/**
 * 用户点击了类型按钮中的一个
 */
function typeButton_clicked(typeButton) {
    filterResult.varType = typeButton.attr("tpvalue");
    filterResult.varTypeName = typeButton.attr("value");
    updateDdNumberView();
}

/**
 * 清空界面上的所有调度号
 */
function clearDdnumberGroup() {
    clearAllChildren("ddnumber-group");
}

/**
 * 弹出提示框
 */
function toast(msg) {
    api.toast({
        msg: msg,
        duration: 3000,
        locaiton: 'top'
    });
}

/**
 * 调接口获取各个分类下的调度号
 */
function initDdNumber(callback) {
    ctValueAndDdNumbersMap.AI["1"] = [];//AI高压侧调度号数据
    ctValueAndDdNumbersMap.AI["2"] = [];//AI低压侧数据
    ctValueAndDdNumbersMap.AI["3"] = [];//AI变压器数据
    ctValueAndDdNumbersMap.AI["4"] = [];//AI直流屏数据
    ctValueAndDdNumbersMap.AI["5"] = [];//AI信号屏数据
    ctValueAndDdNumbersMap.AI["6"] = [];//AI其他数据

    ctValueAndDdNumbersMap.DI["1"] = [];//DI高压侧调度号数据
    ctValueAndDdNumbersMap.DI["2"] = [];//DI低压侧数据
    ctValueAndDdNumbersMap.DI["3"] = [];//DI变压器数据
    ctValueAndDdNumbersMap.DI["4"] = [];//DI直流屏数据
    ctValueAndDdNumbersMap.DI["5"] = [];//DI信号屏数据
    ctValueAndDdNumbersMap.DI["6"] = [];//DI其他数据
    initDdNumberCallbackCount = 0;//回调计数清零

    var tempVarTypeEnmu = [varTypes.AI, varTypes.DI];

    var url = '/ems/rest/ddnum/list';
    for (var i = 1; i <= 6; i++) {
        for (var j = 0; j < tempVarTypeEnmu.length; j++) {

            (function (position, varType) {
                var args = { prId: prId, location: position, varType: varType };
                //本次循环的类型：AI、DI
                var tmpType = varTypesName[tempVarTypeEnmu[j]];

                $api.get(url, args, function (data, err) {
                    initDdNumberCallbackCount++;
                    if (err) {
                        toast("网络请求失败");
                    } else {
                        if (!data.code || data.code != 200) {
                            toast("服务器响应错误" + (data.code ? ("，错误码：" + data.code) : ""));
                        } else {

                            if (data.body) {

                                for (var i = 0; i < data.body.length; i++) {
                                    var element = data.body[i];
                                    ctValueAndDdNumbersMap[tmpType][element.location + ""].push(element.ddNum);
                                }

                            }
                        }
                    }

                    if (initDdNumberCallbackCount == 8) {
                        callback();
                    }
                });
            })(i, tempVarTypeEnmu[j]);
        }
    }
}

/**
 * 显示调度号不存在和类型不存在的占位符
 */
function showEmptyDataPlaceHolder() {
    //隐藏调度号
    $("#ddnumber-group").css("display", "none");
    $("#ddnumber-group-none").css("display", "flex");
}

/**
 * 隐藏调度号不存在和类型不存在的占位符
 */
function hideEmptyDataPlaceHolder() {
    //隐藏调度号
    $("#ddnumber-group").css("display", "flex");
    $("#ddnumber-group-none").css("display", "none");
}

/**
 * 更新界面显示的调度号
 */
function updateDdNumberView() {
    //先清空界面上显示的调度号
    clearDdnumberGroup();
    var ddNumbers = ctValueAndDdNumbersMap[varTypesName[filterResult.varType]][filterResult.ctValue];

    if (ddNumbers.length > 0) {
        //隐藏占位符
        hideEmptyDataPlaceHolder();
        for (var i = 0; i < ddNumbers.length; i++) {
            var dd = ddNumbers[i];
            addDdnumber(dd);
        }
        //默认选中第一个调度号
        var childrens = $("#ddnumber-group").children();
        if (childrens.length > 0) {
            var first = $(childrens[0]);
            first.attr("class", "btn btn-highlight");
            ddNumberButton_clicked(first);
        }
        //为所有的调度号绑定事件
        bindSwitchButtonEvent($("#ddnumber-group").children());
    } else {
        //显示占位符
        showEmptyDataPlaceHolder();
        //设置调度号为空
        filterResult.ddNumber = null;
    }
}

/**
 * 向调度号列表中添加一个调度号
 */
function addDdnumber(ddnumber) {
    var template = '<input class="btn" type="button" value="{dd}" group="ddNumber"/>';
    template = template.replace("{dd}", ddnumber);

    $("#ddnumber-group").append(template);
}

/**
 * 用户点击了取消按钮
 */
function btCancel_clicked() {
    api.closeDrawerPane();
}

/**
 * 向主窗体发送筛选条件
 */
function sendResult() {
    api.sendEvent({
        name: 'filterSelectionChanged',
        extra: filterResult
    });
}

/**
 * 用户点击了确定按钮
 */
function btOk_clicked() {
    if (filterResult.ddNumber) {
        sendResult();
        api.closeDrawerPane();
    } else {
        toast("当前分类下暂无数据");
    }
}

/**
 * 主窗体通知侧栏加载数据
 */
function rtDataLoadData() {
    //标记为已经加载数据
    hasLoaded = true;
    //获取prId
    prId = $api.getStorage('powerRoom').prId;
    if (prId > 0) {
        //获取各个位置下的调度号
        initDdNumber(function () {
            updateDdNumberView();
            //默认查询高压侧第一个调度号的遥测数据
            sendResult();
        });
    }
}

/**
 * 界面显示完成后的回调
 */
function viewAppear(ret, err) {
    if (!hasLoaded) {
        //如果用户滑动打开了侧栏，但是还没加载过数据，则开始加载
        toast("加载中...");
        rtDataLoadData();
    }
}

apiready = function () {
  // 解决iphonex底部标签栏被虚拟home键遮挡
  $api.fixTabBar($api.byId('footer'));
    var ctrl = {
        init: {},
        bind: {}
    }

    ctrl.bind = function () {
        //主窗体通知侧栏加载数据
        api.addEventListener({ name: 'rtDataLoadData' }, rtDataLoadData);
        //界面显示完成后的回调
        api.addEventListener({ name: 'viewappear' }, viewAppear);
        //为位置和类型绑定事件
        bindSwitchButtonEvent($("#location-group").children());
        bindSwitchButtonEvent($("#type-group").children());
        //为确定和取消绑定事件
        $("#btn-cancel").on("touchend", btCancel_clicked);
        $("#btn-ok").on("touchend", btOk_clicked);
    }

    ctrl.init = function () {
        ctrl.bind();
    }

    ctrl.init();
}
