/*
 * title: push-type
 * @author 王飞腾
 * date: 2018/12/21
*/
layui.extend({
    customTree: 'layui/lay/mymodules/custom-tree'
}).define(['jquery','common','customTree','table'],function (exports) {
    var $ = layui.jquery;
    var common = layui.common;
    var pageData = {
        dto : {
            xqName : ''
        }
    };

    //  加载单元列表
    var loadDyTreeList = function(data){
        $.ajax({
            url     :   '/estate/unit/getListByXqId/' + data.id,
            success :   function(result){
                data.asyncFn({
                    list    :   result.list,
                    property:   {
                        id      :   'id',
                        pid     :   'orgPid',
                        name    :   'name',
                        subCount:   ''
                    }
                });
            }
        });
    };

    //  小区数据
    var xqData = {

    };

    //  加载小区列表
    var loadXqTreeList = function(data){
        if (xqData[data.id]){
            data.asyncFn(xqData[data.id]);
        }
        $.ajax({
            url     :   '/permissions/region/authorize/getAuthorizeOrgList',
            data    :   {
                pid :   data.pid
            },
            success :   function(result){
                data.asyncFn({
                    list    :   result.list,
                    property:   {
                        id      :   'id',
                        pid     :   'pid',
                        name    :   'name',
                        subCount:   'unitCount'
                    },
                    getSubList  : function(data){
                        loadDyTreeList(data)
                    }
                });
                xqData.pid = result.list;
            }
        });
    };

    //  重新加载表格方法
    var reloadTable = function($tree,data){
        //  获取表格Id
        var tableId = $tree.next().find('table').eq(0).attr('id');
        tableMap[tableId] ? tableMap[tableId].reload(tableId,data) : void(0);
    };

    //  加载区域列表
    var loadRegionTreeList = function(data){
        $.ajax({
            url     :   '/permissions/region/authorize/getAuthorizeRegion',
            data    :   {
                groupBy :   data.layer,
                pid     :   data.id
            },
            success :   function(result){
                result.list.forEach(function(item){
                    item.subCount = 1;
                });
                data.asyncFn({
                    list    :   result.list,
                    property:   {
                        id      :   'id',
                        pid     :   'pid',
                        name    :   'name',
                        subCount:   'subCount'
                    },
                    getSubList  : function(data){
                        loadRegionTreeList(data)
                    }
                });
            }
        });
    };

    //  表格数组
    var tableMap = {
        //  初始化表格
        init        :   function(options){
            var tableId = options.id;
            options.done = function(result){
                var list = result.data;
                for (var i = 0; i < list.length; i++) {
                    var entity = list[i];
                    
                    tableMap[tableId].selectedIdSet.forEach(function (selectedId) {
                        if (entity.id === selectedId){
                            $('div[lay-id="' + tableId + '"]').find('.layui-table-box table tr[data-index="' + i + '"]').find('td:first .layui-form-checkbox').eq(0).click();
                        }
                    });

                }

            };
            //  初始化表格
            common.layuiTable.render(layui.table,options);
            //  绑定复选框事件
            var eventName = $(options.elem).attr('lay-filter');
            layui.table.on('checkbox(' + eventName + ')',function (obj) {
                if (obj.type === 'all'){
                    if (obj.checked){
                        //  全选
                        var list = layui.table.checkStatus(tableId).data;
                        list.forEach(function(entity){
                            tableMap[tableId].selectedIdSet.add(entity.id)
                        });
                    }else {
                        //  全不选
                        layui.table.cache[tableId].forEach(function(entity){
                            tableMap[tableId].selectedIdSet.delete(entity.id);
                        });
                    }
                }else {
                    var id = obj.data.id;
                    obj.checked ? tableMap[tableId].selectedIdSet.add(id) : tableMap[tableId].selectedIdSet.delete(id);
                }
            });
        },
        //  小区表格
        xq_table    :   {
            init    :   function(options){
                var cols = [[
                    { type :'checkbox' },
                    { title:'小区名称',field:'name',align:'center' },
                    { title:'小区编号',field:'residentialNumber',align:'center',width:120 },
                    { title:'物业信息',field:'orgPidName',align:'center' },
                    { title:'小区地址',field:'region',align:'center' },
                    { title:'单元数量',field:'unitNumber',align:'center',width:100 },
                    { title:'房间数量',field:'roomNumber',align:'center',width:100 },
                    { title:'住户数量',field:'userNumber',align:'center',width:100 }
                ]];
                options.id = 'xq_table';
                options.elem = '#xq_table';
                options.cols = cols;
                options.url = '/permissions/region/authorize/pagingQueryAuthorizeOrg';
                tableMap.init(options);
            },
            reload  :   function(tableId,data){
                layui.table.reload(tableId,{
                    where: {
                        pid:   data.pid
                    }
                    //  重新从第1页开始
                    ,page: {
                        curr: 1
                    }
                });
            },
            //根据搜索条件重置表格
            reloadBySelect  :   function(tableId,data){
                layui.table.reload(tableId,{
                    where: {
                        xqName: data.xqName,
                        pid:   data.pid
                    }
                    //  重新从第1页开始
                    ,page: {
                        curr: 1
                    }
                });
            },
            selectedIdSet   :   new Set()
        },
        //  单元表格
        dy_table    :   {
            init    :   function(options){
                var cols = [[
                    { type : 'checkbox' },
                    { title: '单元名称',field:'name',align:'center' },
                    { title: '单元编号',field:'unitNumber',align:'center',width:120 },
                    { title: '小区名称',field:'residentialName',align:'center' },
                    { title: '建筑年代',field:'builtYear',align:'center',width:100 },
                    { title: '产权性质',field:'propertyNature',align:'center' },
                    { title: '有无电梯',field:'includingElevator',align:'center',width:100 },
                    { title: '房屋总数',field:'roomNumber',align:'center',width:100 }
                ]];
                options.id = 'dy_table';
                options.elem = '#dy_table';
                options.cols = cols;
                options.url = '/permissions/device/authorize/dy/pagingQuery';
                tableMap.init(options);
            },
            reload  :   function(tableId,data) {
                var id = data.layer === 1 ? data.pid : data.id;
                layui.table.reload(tableId,{
                    where: {
                        selectedType:   data.layer,
                        selectedId  :   id
                    }
                    //  重新从第1页开始
                    ,page: {
                        curr: 1
                    }
                });
            },
            selectedIdSet   :   new Set()
        },
        //  设备表格
        device_table:   {
            init    :   function(options){
                var cols = [[
                    { type : 'checkbox' },
                    { title: '设备别名',field:'alias',align:'center' },
                    { title: '设备序列号',field:'serialNumber',align:'center',width:120 },
                    { title: '设备类型',align:'center',width:100,templet:'#device_type' },
                    { title: '创建时间',field:'createDate',align:'center',width:160 },
                    { title: '安装位置',field:'installPath',align:'center' }
                ]];
                options.id = 'device_table';
                options.elem = '#device_table';
                options.cols = cols;
                options.url = '/permissions/device/authorize/pagingQuery';
                tableMap.init(options);
            },
            reload  :   function(tableId,data){
                var id = data.layer === 1 ? data.pid : data.id;
                layui.table.reload(tableId,{
                    where: {
                        selectedType:   data.layer,
                        selectedId  :   id
                    }
                    //  重新从第1页开始
                    ,page: {
                        curr: 1
                    }
                });
            },
            selectedIdSet   :   new Set()
        },
        //  区域表格
        region_table:   {
            init    :   function(options){
                var $tree = $('#region_tree');
                //  加载区域树
                loadRegionTreeList({
                    id      :   null,
                    layer   :   1,
                    asyncFn :   function(data){
                        //  初始化树
                        layui.customTree.init({
                            $node   :   $tree,
                            data    :   data,
                            layer   :   2,
                            clickFn :   function(data){
                                reloadTable($tree,data)
                            }
                        });
                    }
                });
                //  列
                var cols = [[
                    { type : 'checkbox' },
                    { title: '区域名称',field:'name',align:'center' },
                    { title: '设备数量',field:'deviceCount',align:'center',width:120 },
                    { title: '小区数量',field:'xqCount',align:'center',width:120 },
                    { title: '单元数量',field:'dyCount',align:'center',width:120 },
                ]];
                options.id = 'region_table';
                options.elem = '#region_table';
                options.cols = cols;
                options.url = '/permissions/device/authorize/region/pagingQuery';
                tableMap.init(options);
            },
            reload  :   function(tableId,data){
                layui.table.reload(tableId,{
                    where: {
                        selectedId  :   data.id,
                        groupBy     :   data.layer
                    }
                    //  重新从第1页开始
                    ,page: {
                        curr: 1
                    }
                });
            },
            selectedIdSet   :   new Set()
        }
    };

    $(document).on('click','#select_btn',function () {
        pageData.dto.xqName = $('#select_con').val();
        tableMap.xq_table.reloadBySelect('xq_table',pageData.dto)
    });

    exports('pushType',{
        //  初始化方法
        init    :       function(options){
            //  初始化 [小区,单元,设备]树
            $.ajax({
                url     :   '/permissions/region/authorize/getAuthorizeOrgList',
                data    :   {
                    isSelectParent  :   1
                },
                success :   function(result){
                    result.list.forEach(function (item) {
                        item.clientCount = 1;
                    });
                    //  初始化 [小区,单元,设备]树
                    var treeNodeArray = [$('#xq_tree'),$('#dy_tree'),$('#device_tree')];
                    for (var i = 1; i <= treeNodeArray.length; i++){
                        var $tree = treeNodeArray[i - 1];
                        layui.customTree.init({
                            $node   :   $tree,
                            data    :   {
                                list    :   result.list,
                                property:   {
                                    id      :   'id',
                                    pid     :   'pid',
                                    name    :   'parentName',
                                    subCount:   'clientCount'
                                },
                                getSubList  : function (data) {
                                    loadXqTreeList(data);
                                }
                            },
                            layer   :   i,
                            clickFn :   function (data) {
                                reloadTable(this.$node,data);
                            }
                        });
                    }
                }
            });
            //  切换发布类型事件
            $('#push_type_tabs ul li').on('click',function () {
                var $this = $(this);
                var _index = $this.index();
                $this.addClass('layui-this').siblings().removeClass('layui-this');
                var tab = $this.parent().next().find('.layui-tab-item').eq(_index);
                tab.addClass('layui-show').siblings().removeClass('layui-show');
                //  判断是否需要加载表格
                var id = tab.find('table').eq(0).attr('id');
                if (!layui.table.cache[id]) {
                    tableMap[id] ? tableMap[id].init(options) : void(0);
                }else {
                    //  取消选中
                    layui.customTree.uncheck(tab.find('.layui-tree').eq(0));
                    //  刷新表格
                    layui.table.reload(id,{
                        where: null
                        //  重新从第1页开始
                        ,page: {
                            curr: 1
                        }
                    });
                }
            });
            //  默认选中按小区发布
            $('#push_type_tabs ul li:first').click();
        },
        //  获取当前表格中选中的数据
        getSelectedData  :   function(){
            var table = $('#push_type_tabs .layui-tab-item.layui-show table:first');
            var tableId = table.attr('id');
            var idList = [];
            tableMap[tableId].selectedIdSet.forEach(function (id) {
                idList.push(id);
            });
            return {
                type    :   table.attr('data-type'),
                list    :   idList
            };
        }
    });
});
