"use strict";
layui.extend({
    common   :   'js/common',
    region    :   'layui/lay/mymodules/region'
}).use(['jquery','common','table','region'],function(){
    var $ = layui.jquery;
    var common = layui.common;

    //  机构Id
    var orgId =  parseInt($('#org_id').val());
    //  常量
    var list    =   [
        {
            //  表格相关参数
            tableId         :   'allow_table',
            tableElem       :   '#allow_data_table',
            tableUrl        :   '/permissions/region/authorize/pagingQuery?isAuthorized=1&orgId=' + orgId,
            tableEvent      :   'allow_table_event',
            //  选中的Id列表
            idSet             :   new Set(),
            //  已选的数量
            selectedTotal   :   $('#allow_data .selected_length'),
            //  合计
            total           :   $('#allow_data .data_total'),
            //  清空按钮
            cleanBtn           :   $('#allow_data .clean_all_btn'),
            //  省市区Div
            regionElem      :   '#allow_region_body',
            //  触发省市区节点
            regionTrigger   :   $('#allow_region'),
            //  （查询条件）省市区code
            regionInput     :   $('#allow_data input[name="areaCode"]'),
            //  (查询条件)小区名称
            regName         :   $('#allow_data input[name="orgName"]'),
            //  查询按钮
            selectBtn       :   $('#allow_data button[name="select"]'),
            //  重置查询条件
            resetBtn       :   $('#allow_data button[type="reset"]')
        },{
            //  表格相关参数
            tableId         :   'not_allow_table',
            tableElem       :   '#not_allow_data_table',
            tableUrl        :   '/permissions/region/authorize/pagingQuery?isAuthorized=2&orgId=' + orgId,
            tableEvent      :   'not_allow_table_event',
            //  选中的Id列表
            idSet             :   new Set(),
            //  已选的数量
            selectedTotal   :   $('#not_allow_data .selected_length'),
            //  合计
            total           :   $('#not_allow_data .data_total'),
            //  清空按钮
            cleanBtn           :   $('#not_allow_data .clean_all_btn'),
            //  省市区Div
            regionElem      :   '#not_allow_region_body',
            //  触发省市区节点
            regionTrigger   :   $('#not_allow_region'),
            //  （查询条件）省市区code
            regionInput     :   $('#not_allow_data input[name="areaCode"]'),
            //  (查询条件)小区名称
            regName         :   $('#not_allow_data input[name="orgName"]'),
            //  查询按钮
            selectBtn       :   $('#not_allow_data button[name="select"]'),
            //  重置查询条件
            resetBtn       :   $('#not_allow_data button[type="reset"]')
        }
    ];

    //  初始化表格
    var initTable = function(item){
        var options = {
            id      :   item.tableId,
            elem    :   item.tableElem,
            url     :   item.tableUrl,
            cols    :   [[
                { type : 'checkbox' }
                , { field: 'xqName', title: '小区名称',align:'center',width:100 }
                , { field: 'region', title: '区域',align:'center',width:200 }
                ,{ field: 'address', title: '详细地址',align:'center' }
            ]],
            method  :   'GET',
            height  :   'full-230',
            done    :   function(result, curr, count){
                dataInit(result.data,count,item);
            }
        };
        return common.layuiTable.render(layui.table,options);
    };

    //  重新加载表格
    var reloadTable = function(item){
        //  重新加载表格
        layui.table.reload(item.tableId,{
            //  设定异步数据接口的额外参数
            where: {
                areaId  :   item.regionInput.val(),
                xqName  :   item.regName.val()
            }
            //  重新从第1页开始
            ,page: {
                curr: 1
            }
        });
    };

    //  重置查询表单
    var clearSelectFrom = function(item){
        item.regionTrigger.val('');
        item.regionInput.val('');
        item.regName.val('');
    };

    //  复选框值发生改变公共方法
    var checkboxFn  = function(obj,item){
        if (obj.type === 'all'){
            if (obj.checked) {
                //  全选
                var list = layui.table.checkStatus(item.tableId).data;
                list.forEach(function(entity){
                    item.idSet.add(entity.xqId)
                });
            }else {
                //  全不选
                layui.table.cache[item.tableId].forEach(function(entity){
                    item.idSet.delete(entity.xqId);
                });
            }
        }else{
            var id = obj.data.xqId;
            obj.checked ? item.idSet.add(id) : item.idSet.delete(id);
        }
        //  设置选中数量
        item.selectedTotal.text(item.idSet.size);
    };

    //  数据初始化函数
    var dataInit = function(list,count,item){
        //  已勾选的数据条数
        var selectedTotal = item.idSet.size;
        item.selectedTotal.text(selectedTotal);
        //  设置合计
        item.total.text(count);
        for (var i = 0; i < list.length; i++){
            for (var selectedId in item.idSet){
                var entity = list[i];
                if (entity.xqId === selectedId){
                    $('div[lay-id="' + item.tableId + '"]').find('.layui-table-box table tr[data-index="' + i + '"]').find('td:first .layui-form-checkbox').eq(0).click();
                    break;
                }
            }
        }
    };

    //  初始化省市区
    var initRegion = function(item){
        layui.region.init({
            elem    :   item.regionElem,
            trigger :   '#' + item.regionTrigger.attr('id'),
            provinceCallbackFn  :   function(data){
                item.regionTrigger.val(data.province.text);
                item.regionInput.val(data.province.id);
            },
            cityCallbackFn      :   function(data){
                var address = data.province.text + '-' + data.city.text;
                item.regionTrigger.val(address);
                item.regionInput.val(data.city.id);
            },
            areaCallbackFn      :   function(data){
                var address = data.province.text + '-' + data.city.text + '-' +data.county.text;
                item.regionTrigger.val(address);
                item.regionInput.val(data.county.id);
            },
            //清空回调
            clearFn : function(){
                $node.regionInput.val('');
                $node.provinceInput.val('');
                $node.cityInput.val('');
                $node.areaInput.val('');
            }
        });
    };

    /* -------------------------------------------------------------------------------------------------------------- */

    //  初始化绑定事件
    (function(){
        list.forEach(function(item){
            //  初始化表格
            initTable(item);
            //  初始化省市区
            initRegion(item);
            //  清空事件
            item.cleanBtn.on('click',function () {
                item.idSet.clear();
                $('div[lay-id="' + item.tableId + '"]').find('.layui-table-box table tr').each(function () {
                    $(this).find('td:first .layui-form-checked').eq(0).click();
                });
            });
            //  复选框值发生改变事件
            layui.table.on('checkbox(' + item.tableEvent + ')',function (obj) {
                checkboxFn(obj,item);
            });
            //  绑定查询事件
            item.selectBtn.on('click',function(){
                reloadTable(item)
            });
            //  绑定重置事件
            item.resetBtn.on('click',function(){
                clearSelectFrom(item)
            });
        });
    })();

    //  批量删除事件
    $('#batch_remove').on('click',function () {
        var roleIds = '';
        list[0].idSet.forEach(function(item){
            roleIds += item + ',';
        });
        if (!roleIds){
            layer.msg('请选中要移除的小区');
            return;
        }
        $.ajax({
            url     :   '/permissions/region/authorize/batch/delete',
            type    :   'POST',
            data    :   {
                orgIds  :   roleIds,
                orgId   :   orgId
            },
            success :   function(result){
                if (result.data){
                    layer.msg("移除成功",{time:1000});
                    list.forEach(function(item){
                        //  刷新表格
                        reloadTable(item);
                    });
                    list[0].idSet = new Set();
                    //  设置选中数量
                    list[0].selectedTotal.text(0);
                } else {
                    layer.alert("移除成功");
                }
            }
        });
    });

    //  批量添加事件
    $('#batch_add').on('click',function () {
        var roleIds = '';
        list[1].idSet.forEach(function(item){
            roleIds += item + ',';
        });
        if (!roleIds){
            layer.msg('请选中要添加的小区');
            return;
        }
        $.ajax({
            url     :   '/permissions/region/authorize/batch/add',
            type    :   'POST',
            data    :   {
                orgIds  :   roleIds,
                orgId   :   orgId
            },
            success :   function(result){
                if (result.data){
                    layer.msg("添加成功",{time:1000});
                    list.forEach(function(item){
                        //  刷新表格
                        reloadTable(item);
                    });
                    list[1].idSet = new Set();
                    //  设置选中数量
                    list[1].selectedTotal.text(0);
                } else {
                    layer.alert("添加失败");
                }
            }
        });
    });

});