"use strict";
layui.extend({
    common: 'js/common',
    xmSelect: 'layui/dist/xm-select',
    orgTree: 'layui/lay/mymodules/org-tree',
    region: 'layui/lay/mymodules/region',
    dropdown: 'layui/lay/modules/dropdown'
}).use(['jquery', 'layer', 'common', 'table', 'orgTree', 'region', 'form', 'dropdown', 'xmSelect'], function () {
    //  弹窗插件
    var layer = layui.layer;
    //  Jquery插件
    var $ = layui.jquery;
    //  引入公共模块
    var common = layui.common;
    //  引入下拉菜单
    var xmSelect = layui.xmSelect;
    //引入表单
    var form = layui.form;
    var dropdown = layui.dropdown;

    var $node = {
        //  小区名称
        nameInput: $('input[name="name"]'),
        //设备名称
        deviceNameInput: $('input[name="device_name"]'),
        //设备序列号
        serialNumberInput: $('input[name = "serial_number"]'),
        //设备状态
        onLineStatusSelect: $('#on_line_status'),
        // 省市区表单
        provinceInput: $('input[name="regionProvince"]'),
        cityInput: $('input[name="regionCity"]'),
        areaInput: $('input[name="regionArea"]'),
        regionInput: $('#region'),
        //设备版本搜索
        startVersion: $('#start_version_id'),
        endVersion: $('#end_version_id')
    };

    //  数据
    var Data = {
        //  当前用户机构Id
        myOrgId: parseInt($('#user_org_id').val()),
        //  表格Id
        tableId: 'data_table',
        //  选中的Id列表
        selectedIdSet: new Set(),
        //  选中的设备项列表
        selectedDeviceMap: new Map(),
        //设备在线状态
        onlineStatus: $('#onlineStatus').val(),
        //选择版本的id
        appPackageId: $('#id').val(),
        //厂商
        deviceFactory: $('#deviceFactory').val(),
        //设备型号
        deviceModelNumber: $('#deviceModelNumber').val(),
        //设备版本号
        version: $('#version').val()
    };

    //  初始化表单
    var layuiTable = common.layuiTable.render(layui.table, {
        id: Data.tableId
        ,
        elem: '#data_entity_table'
        ,
        url: '/device/manage/pagingQuery?deviceFactory=' + Data.deviceFactory + '&deviceModelNumber=' + Data.deviceModelNumber
        ,
        cellMinWidth: 80 //全局定义常规单元格的最小宽度，
        ,
        cols: [[
            {type: 'checkbox'}
            , {field: 'alias', title: '设备别名', align: 'center'}
            , {field: 'name', title: '设备名称', align: 'center'}
            , {field: 'serialNumber', title: '设备序列号', align: 'center'}
            , {title: '设备类型', align: 'center', templet: '#device_type', width: 100}
            , {title: '是否支持人脸识别', align: 'center', templet: '#have_face', width: 100}
            , {field: 'xqName', title: '所属小区', align: 'center', width: 100}
            , {field: 'installPath', title: '安装位置', align: 'center', width: 100}
            , {title: '朝向', align: 'center', templet: '#device_is_out', width: 60}
            , {
                title: '在线状态', align: 'center', width: 80, templet: function (entity) {
                    if (entity['onlineStatus'] === 1) {
                        return '<span class="layui-badge layui-bg-green">在线</span>';
                    } else {
                        return '<span class="layui-badge layui-bg-cyan">离线</span>';
                    }
                }
            }
            , {title: '流量卡卡号', align: 'center', templet: '#flowCard', event: 'flowCardBind', style: 'cursor: pointer'}
            , {
                title: '最后通信时间', align: 'center', width: 160, templet: function (entity) {
                    return null == entity['lastHeartbeat'] ? '' : layui.util.toDateString(new Date(parseInt(entity['lastHeartbeat'])), 'yyyy-MM-dd HH:mm:ss');
                }
            }
            , {field: 'versionNumber', title: '版本号', align: 'center'}
        ]]
        ,
        page: true
        ,
        done: function (result) {
            var list = result.data;
            for (var i = 0; i < list.length; i++) {
                var entity = list[i];
                Data.selectedIdSet.forEach(function (selectedId) {
                    if (entity.id === selectedId) {
                        $('div[lay-id="' + Data.tableId + '"]').find('.layui-table-box table tr[data-index="' + i + '"]').find('td:first .layui-form-checkbox').eq(0).click();
                    }
                });
            }
        }
    });

    //  初始化省市区
    layui.region.init({
        //  元素节点
        elem: '#region_body',
        //  触发此元素时显示
        trigger: '#region',
        //  选中省的回调
        provinceCallbackFn: function (data) {
            var address = data.province.text;
            $node.regionInput.val(address);
            $node.provinceInput.val(data.province.id);
        },
        //  选中市的回调
        cityCallbackFn: function (data) {
            var address = data.province.text + '-' + data.city.text;
            $node.regionInput.val(address);
            $node.cityInput.val(data.city.id);
        },
        //  选中区域的回调
        areaCallbackFn: function (data) {
            var address = data.province.text + '-' + data.city.text + '-' + data.county.text;
            $node.regionInput.val(address);
            $node.areaInput.val(data.county.id);
        },
        //  关闭时的回调
        hideCallbackFn: function (data) {
        },
        //清空回调
        clearFn: function () {
            $node.regionInput.val('');
            $node.provinceInput.val('');
            $node.cityInput.val('');
            $node.areaInput.val('');
        }
    });

    //  重新加载表格
    var selectedItem = undefined;
    var reloadTable = function () {
        //  重新加载表格
        layuiTable.reload({
            //  设定异步数据接口的额外参数
            where: {
                xqName: $node.nameInput.val(),
                name: $node.deviceNameInput.val(),
                serialNumber: $node.serialNumberInput.val(),
                onlineStatus: $node.onLineStatusSelect.val(),
                regionProvince: $node.provinceInput.val(),
                regionCity: $node.cityInput.val(),
                regionArea: $node.areaInput.val(),
                smallVersion: $node.startVersion.val(),
                bigVersion: $node.endVersion.val()
            }
            //  重新从第1页开始
            , page: {
                curr: 1
            }
        });
    };

    //  选中复选框事件
    layui.table.on('checkbox(data_table_event)', function (obj) {
        if (obj.type === 'all') {
            if (obj.checked) {
                //  全选
                var list = layui.table.checkStatus(Data.tableId).data;
                list.forEach(function (entity) {
                    Data.selectedIdSet.add(entity.id);
                    Data.selectedDeviceMap.set(entity.id, entity);
                    selectDeviceIds.add(Number.parseInt(entity.id));
                });
            } else {
                //  全不选
                layui.table.cache[Data.tableId].forEach(function (entity) {
                    Data.selectedIdSet.delete(entity.id);
                    Data.selectedDeviceMap.delete(entity.id);
                    selectDeviceIds.delete(Number.parseInt(entity.id));
                });
            }
        } else {
            var id = obj.data.id;
            var data = obj.data;
            obj.checked ? Data.selectedIdSet.add(id) : Data.selectedIdSet.delete(id);
            obj.checked ? Data.selectedDeviceMap.set(id, data) : Data.selectedDeviceMap.delete(id);
            // obj.checked ? selectDeviceIds.add(id) : selectDeviceIds.delete(id);
        }
    });

    //监听查询
    form.on('submit(query)', function () {
        reloadTable();
    });

    //监听重置
    form.on('submit(reset)', function () {
        $node.nameInput.val("");
        $node.deviceNameInput.val("");
        $node.serialNumberInput.val("");
        $node.onLineStatusSelect.val('');
        //设备版本号
        $node.startVersion.val("");
        deviceStartVersionSelect.setValue([]);
        $node.endVersion.val("");
        deviceEndVersionSelect.setValue([]);
        //省市区
        $node.regionInput.val('');
        $node.provinceInput.val('');
        $node.cityInput.val('');
        $node.areaInput.val('');
        //select标签
        // 刷新select标签
        form.render('select');
        reloadTable();
    });

    if (Data.onlineStatus) {
        $node.onLineStatusSelect.next().find('dl dd[lay-value="' + Data.onlineStatus + '"]').click();
        reloadTable();
    }

    //设备版本号列表下拉框(开始版本)
    var deviceStartVersionSelect = xmSelect.render({
        el: '#start_version',
        radio: true,
        prop: {
            name: 'version',
            value: 'id',
        },
        toolbar: {
            show: true,
            list: [{
                name: '清空',
                method() {
                    deviceStartVersionSelect.setValue([]);
                    $node.startVersion.val('');
                }
            }]
        },
        clickClose: true,
        filterable: true,
        remoteSearch: true,
        remoteMethod: function (val, cb, show) {
            $.ajax({
                type: 'GET',
                url: '/permissions/appPackage/getListByLikeVersion?deviceFactory=' + Data.deviceFactory + '&version=' + val,
                data: {
                    name: val,
                    isSelect: true
                },
                success: function (result) {
                    cb(result.list);
                },
                error: function () {
                    cb([]);
                }
            });
        },
        //监听选择
        on: function (data) {
            var change = data.change;
            if (change.length > 0) {
                $node.startVersion.val(change[0].version);
            }
        },
        //显示方式
        model: {
            label: {
                type: 'text',
                text: {
                    //左边拼接的字符
                    left: '',
                    //右边拼接的字符
                    right: '',
                    //中间的分隔符
                    separator: ', ',
                },
            }
        },
    });

    //设备版本号列表下拉框(结束版本)
    var deviceEndVersionSelect = xmSelect.render({
        el: '#end_version',
        radio: true,
        prop: {
            name: 'version',
            value: 'id',
        },
        toolbar: {
            show: true,
            list: [{
                name: '清空',
                method() {
                    deviceEndVersionSelect.setValue([]);
                    $node.endVersion.val('');
                }
            }]
        },
        clickClose: true,
        filterable: true,
        remoteSearch: true,
        remoteMethod: function (val, cb, show) {
            $.ajax({
                type: 'GET',
                url: '/permissions/appPackage/getListByLikeVersion?deviceFactory=' + Data.deviceFactory + '&version=' + val,
                data: {
                    name: val,
                    isSelect: true
                },
                success: function (result) {
                    cb(result.list);
                },
                error: function () {
                    cb([]);
                }
            });
        },
        //监听选择
        on: function (data) {
            var change = data.change;
            if (change.length > 0) {
                $node.endVersion.val(change[0].version);
            }
        },
        //显示方式
        model: {
            label: {
                type: 'text',
                text: {
                    //左边拼接的字符
                    left: '',
                    //右边拼接的字符
                    right: '',
                    //中间的分隔符
                    separator: ', ',
                },
            }
        },
    })

    //监听设备更新按钮
    form.on('submit(update)', function () {
        if (Data.selectedIdSet.size > 0) {
            var params = {};
            //  选中升级包ID
            params['id'] = Data.appPackageId;
            params['deviceId'] = Array.from(Data.selectedIdSet).join();
            layer.confirm('是否确定要升级设备？',function (index) {
                common.sendAsyncRequest("/permissions/appPackage/deviceSelectPackageUpgrade", 'POST', params, callbackFn);
            })
        } else {
            layer.msg("请选中要更新的设备");
        }
    });

    //回调函数
    function callbackFn(result) {
        if (result.code == '200') {
            layer.msg("操作成功", {time: 1000, shade: [0.1, '#000', true]}, function () {
                // 父页面刷新
                parent.location.reload();
                //获取当前弹窗出层的名字
                var mylay = parent.layer.getFrameIndex(window.name);
                //关闭弹窗层
                parent.layer.close(mylay);
            });
        } else {//添加失败
            layer.msg("操作失败");
        }
    }
});
