commonModule.
controller('addExistDimensionModalController', ['$scope', '$log', '$translate', 'uiGridConstants', '$location', '$timeout', '$interval', '$filter', 'SweetAlert', 'roleService', 'userService', 'permissionService', 'dimensionService',
    function ($scope, $log, $translate, uiGridConstants, $location, $timeout, $interval, $filter, SweetAlert, roleService, userService, permissionService, dimensionService) {

        $scope.searchValue = "";

        var modalSelector = '#addDimensionModal';

        var showWarning = function (resultMsg) {

            var errMsg = $translate.instant(resultMsg);
            SweetAlert.warning(errMsg);
        };

        var showSuccessMsg = function (resultMsg) {

            var errMsg = $translate.instant(resultMsg);
            SweetAlert.success(errMsg);
        };

        var showModal = function () {

            $scope.originalList = angular.copy($scope.selectedDimensionList);
            getDimensionList();
            $(modalSelector).modal("show");
        };

        $scope.$watch('operateType', function (newValue, oldValue) {
            if (newValue) {

                if (newValue == constant.Operation.Add) {
                    showModal();
                } else if (newValue == constant.Operation.Edit) {

                }
            }
        });

        $(".addRoleModal").on("hidden.bs.modal", function () {
            $scope.operateType = null;
        });

        $scope.closeModal = function () {
            $scope.operateType = null;
        };

        $scope.Save = function () {
            //返回用户ID列表
            //console.log(JSON.stringify($scope.selectedRoleList));
            $scope.operateType = null;
            $scope.isUpdate = true;
            $(modalSelector).modal("hide");
        };


        var setSelectItems = function (data) {

            if ($scope.selectedDimensionList && $scope.selectedDimensionList.length > 0) {
                for (var i = 0; i < data.length; i++) {

                    if ($scope.selectedDimensionList.indexOf(data[i].id) > -1) {
                        data[i].selected = true;
                        data[i].expanded = true;
                    }

                    if (data[i].items && data[i].items.length > 0) {
                        setSelectItems(data[i].items);
                    }
                }
            }

            return data;
        };

        //获取维度列表
        var getDimensionList = function () {

            dimensionService.getDevDimensionTreeList().success(function (data) {
                if (data) {
                    var data = setSelectItems(data);
                    $scope.dimensionTreeViewData = data;
                }
            });
        };

        //var loadDimensionValueByID = function (dimensionId) {
        //    dimensionService.getDimensionValueList(dimensionId).success(function (data) {
        //        if (data) {
        //            //$scope.dimensionValueTreeViewData = data;
        //        }
        //    });
        //};

        $scope.searchOptions = {
            bindingOptions: {
                value: "searchValue"
            },
            placeholder: $translate.instant('Search'),
            width: 518,
            mode: "search",
            valueChangeEvent: "keyup"
        };

        //加载维度值配置
        //var loadDimensionValueTree = function () {
        //    $scope.dimensionValueTreeViewOptions = {
        //        bindingOptions: {
        //            dataSource: 'dimensionValueTreeViewData',
        //            searchValue: 'searchValue'
        //        },

        //        selection: {
        //            mode: "multiple"
        //        },

        //        loadPanel: {
        //            enabled: true
        //        },
        //        scrolling: {
        //            mode: "virtual"
        //        },
        //        keyExpr: "id",
        //        parentIdExpr: "parentId",
        //        showRowLines: true,
        //        showColumnLines: true,
        //        expandAllEnabled: true,
        //        rowAlternationEnabled: true,
        //        expandedRowKeys: [1],
        //        showBorders: true,
        //        noDataText: $translate.instant('NoDataText'),
        //        selectAllText: $translate.instant('SelectAll'),
        //        displayExpr: 'name',  //显示的属性名称,默认为text
        //        itemsExpr: 'subRoles',  //子层的数组名称,默认为items
        //        //scrollDirection:'vertical',  //Accepted Values: 'vertical' | 'horizontal' | 'both'
        //        selectNodesRecursive: true,  //级联选择
        //        showCheckBoxesMode: 'normal', //Accepted Values: 'none' | 'normal' | 'selectAll'
        //        onItemSelectionChanged: function (obj, element, model, node) {
        //            populateSelectedRole(obj.itemData);
        //        },
        //        onInitialized: function (e) {
        //            //$scope.widgetInstance = e.component;
        //        },
        //        //点击行,选中
        //        onItemClick: function (e) {
        //            //loadDimensionValueByID(e.itemData.id);
        //        },
        //        onContentReady: function (object, container) {
        //            object.element.find('.dx-checkbox-checked').addClass('dx-state-disabled');
        //        }
        //    };
        //};

        //加载维度配置
        var loadDimensionTree = function () {
            $scope.dimensionTreeViewOptions = {
                bindingOptions: {
                    dataSource: 'dimensionTreeViewData',
                    searchValue: 'searchValue'
                },

                selection: {
                    mode: "multiple"
                },

                loadPanel: {
                    enabled: true
                },
                scrolling: {
                    mode: "virtual"
                },
                keyExpr: "id",
                //parentIdExpr: "parentId",
                showRowLines: true,
                showColumnLines: true,
                expandAllEnabled: true,
                rowAlternationEnabled: true,
                expandedRowKeys: [1],
                showBorders: true,
                noDataText: $translate.instant('NoDataText'),
                selectAllText: $translate.instant('SelectAll'),
                //displayExpr: 'name',  //显示的属性名称,默认为text
                //itemsExpr: 'subRoles',  //子层的数组名称,默认为items
                //scrollDirection:'vertical',  //Accepted Values: 'vertical' | 'horizontal' | 'both'
                selectNodesRecursive: true,  //级联选择
                showCheckBoxesMode: 'normal', //Accepted Values: 'none' | 'normal' | 'selectAll'
                onItemSelectionChanged: function (obj, element, model, node) {
                    populateSelectedDimensionValueList(obj.itemData);
                },
                onInitialized: function (e) {
                    $scope.widgetInstance = e.component;
                },
                //点击行,选中
                onItemClick: function (e) {

                    //loadDimensionValueByID(e.itemData.id);
                },
                onItemRendered: function (e) {

                    var originalList = $scope.originalList;

                    if (e && e.itemData && originalList && originalList.length > 0) {

                        if (originalList.indexOf(e.itemData.id) > -1) {
                            e.itemElement.closest('li.dx-treeview-node').find('.dx-checkbox-checked').addClass("dx-state-disabled");
                        }

                        if (e.itemData.items && e.itemData.items.length>0) {
                            var subRoles = e.itemData.items;
                            var subRoleId = _.pluck(subRoles, 'id');
                            var hasCheckedAll = true;
                            for (var i = 0; i < originalList.length; i++) {
                                var hasFind = _.find(subRoleId, function (item) {
                                    return item.id == originalList[i].id;
                                });
                                if (!hasFind) {
                                    hasCheckedAll = false;
                                    break;
                                }
                            }
                            if (hasCheckedAll) {
                                e.itemElement.closest('li.dx-treeview-node').find('.dx-checkbox-checked').addClass("dx-state-disabled");
                            }
                        }
                    }
                }
                //onContentReady: function (object, container) {
                //    object.element.find('.dx-checkbox-checked').addClass('dx-state-disabled');
                //}
            };
        };

        //构造选中的维度值list
        var populateSelectedDimensionValueList = function (itemData) {

            var itemIndex = -1;

            if (itemData.selected) {
                if (itemData.parentId != null && itemData.parentId !== undefined) {
                    if ($scope.selectedDimensionList.indexOf(itemData.id) < 0) {
                        $scope.selectedDimensionList.push({
                            'parentId': itemData.parentId,
                            'id': itemData.id
                        });
                    } 
                } else {
                    itemData.items.forEach(function (x) {
                        if ($scope.selectedDimensionList.indexOf(x.id) < 0) {
                            $scope.selectedDimensionList.push({
                                'parentId': itemData.id, //当前选中节点的ID,也就是父级ID
                                'id': x.id   //叶子节点ID
                            });
                        }
                    });
                }
            } else if (!itemData.selected) {

                if (itemData.parentId != null && itemData.parentId !== undefined) {
                    $.each($scope.selectedDimensionList, function (index, item) {
                        if (item.id === itemData.id) {
                            $scope.selectedDimensionList.splice(index, 1);
                            return false;
                        }
                    });
                } else {
                    var parentId = itemData.id;
                    var cloneSelectedDimensionList = angular.copy($scope.selectedDimensionList);
                    var removeIndexList = [];

                    $.each(cloneSelectedDimensionList, function (index, item) {
                        itemData.items.forEach(function (x) {
                            if (item.id === x.id && item.parentId === parentId) {
                                removeIndexList.push(index);
                            }
                        });
                    });

                    //从后往前删除
                    for (var i = removeIndexList.length - 1; i >= 0; i--) {
                        $scope.selectedDimensionList.splice(removeIndexList[i], 1);
                    }

                    $scope.selectedDimensionList.forEach(function (item) {
                        $scope.widgetInstance.selectItem(item);
                    });
                }
            }
            console.log($scope.selectedDimensionList);
        };

        (function initialize() {
            $log.debug('addExistDimensionModalController.ctor()...');

            //loadDimensionValueTree();
            loadDimensionTree();
            // showModal();
        })();

    }
]);