commonModule.
controller('operateLogController', ['$scope', '$log', '$translate', 'uiGridConstants', '$location', '$timeout', '$interval', 'operationLogService', '$filter', 'loginContext', 'userService',
    function ($scope, $log, $translate, uiGridConstants, $location, $timeout, $interval, operationLogService, $filter, loginContext, userService) {

        var logTypeMap = {
            organization: {
                index: "organization",
                logTitle: "OperateOrganizationLog",
                type: constant.OperateLogType.OperationLogOrganization,
                moduleName: 'Organization'
            },
            user: {
                index: "user",
                logTitle: "OperateUserLog",
                type: constant.OperateLogType.OperationLogUser,
                moduleName: 'User'
            },
            userlist: {
                index: "user",
                logTitle: "OperateUserLog",
                type: constant.OperateLogType.OperationLogUser,
                moduleName: 'User'
            },
            userDetail: {
                index: "user",
                logTitle: "OperateUserLog",
                type: constant.OperateLogType.OperationLogUser,
                moduleName: 'User'
            },
            project: {
                index: "project",
                logTitle: "OperateProjectLog",
                type: constant.OperateLogType.OperationLogProject,
                moduleName: 'Project'
            },
            role: {
                index: "role",
                logTitle: "OperateRoleLog",
                type: constant.OperateLogType.OperationLogRole,
                moduleName: 'Role'
            },
            declarationFormConfiguration: {
                index: "declarationFormConfiguration",
                logTitle: "ReportConfigurationDescLogTitle",
                type: constant.OperateLogType.OperationLogReport,
                moduleName: 'ReportConfiguration'
            },
            subjectCorresponding: {
                index: "subjectCorresponding",
                logTitle: "SubjectCorrespondingLogTitle",
                type: constant.OperateLogType.OperationLogSubjectCorres,
                moduleName: 'BasicDataEnterpriceAccount'
            },
            orangizationStructureManage: {
                index: "orangizationStructureManage",
                logTitle: "OrangizationStructureManageLog",
                type: constant.OperateLogType.OperationLogBasicData,
                moduleName: 'BasicDataOrganizationStructure'
            },
            businessUnit: {
                index: "businessUnit",
                logTitle: "BusinessUnitLog",
                type: constant.OperateLogType.OperationLogBasicData,
                moduleName: 'BasicDataBusinessUnit'
            },
            regionManage: {
                index: "regionManage",
                logTitle: "RegionManageLog",
                type: constant.OperateLogType.OperationLogBasicData,
                moduleName: 'BasicDataArea'
            },
            enterpriseAccountManage: {
                index: "enterpriseAccountManage",
                logTitle: "EnterpriseAccountManageLog",
                type: constant.OperateLogType.OperationLogEnterPrise,
                moduleName: 'BasicDataEnterpriceAccount'
            },
            customerListManage: {
                index: "customerListManage",
                logTitle: "CustomerListManageLog",
                type: constant.OperateLogType.OperationLogBasicData,
                moduleName: 'BasicDataCustomer'
            },
            keyCodeConfiguration: {
                index: "keyValueConfig",
                logTitle: "KeyValueConfigurationLogTitle",
                type: constant.OperateLogType.OperationKeyvalueConfiguration,
                moduleName: 'KeyValueConfig'
            },
            modelconfiguration: {
                index: "modelConfiguration",
                logTitle: "ModelConfigurationLogLogTitle",
                type: constant.OperateLogType.OperationLogModelConfiguration,
                moduleName: 'ModelConfiguration'
            },
            ruleEngineConfiguration: {
                index: "ruleEngineConfig",
                logTitle: "RuleSourceLogTitle",
                type: constant.OperateLogType.OperationRuleEngineConfiguration,
                moduleName: 'RuleEngineConfig'
            },
            workFlowManage: {
                index: "workFlowManage",
                logTitle: "LogTitleWorkflow",
                type: constant.OperateLogType.OperationLogWorkflow,
                moduleName: 'Workflow'
            },
            storeArchitectureView: {
                index: "storeArchitectureView",
                logTitle: "LogTitleStock",
                type: constant.OperateLogType.OperationLogStock,
                moduleName: 'Stock'
            },

        };

        var commonTitle = {
            logType: "OperationContent",
            logOperateObject: "LogOperateObject",
            logOriginalState: "LogOriginalState",
            logUpdateState: "LogUpdateState",
            logOperationDescription: "LogOperationDescription",
            logOperationUser: "LogOperationUser",
            logOperationTime: "LogOperationTime",
            logOperationOID: "LogOperationOID",
            logOperationIP: "LogOperationIP",
            logComments: 'LogComments'
        };

        var actionMap = {
            1: $translate.instant('New'),
            2: $translate.instant('Update'),
            3: $translate.instant('Delete'),
            4: $translate.instant('Copy'),
            5: $translate.instant('AutoMapping'),
            6: $translate.instant('ManualMapping'),
            7: $translate.instant('CancelMapping'),
            8: $translate.instant('AddEnterpriseAccountSet'),
            9: $translate.instant('UpdateEnterpriseAccountSet'),
            10: $translate.instant('AddEnterpriseAccount'),
            11: $translate.instant('UpdateEnterpriseAccount'),
            12: $translate.instant('AddRelevantOrgAction'),
            13: $translate.instant('UpdateRelevantOrg'),
            14: $translate.instant('DeleteRelevantOrg'),
            15: $translate.instant('AddNewUser'),
            16: $translate.instant('DeleteUser'),
            17: $translate.instant('AddNewPermission'),
            18: $translate.instant('DeletePermission')
        };

        var perationModuleMap = {
            1: 'OrganizationStructureDesc',
            2: 'RegionDesc',
            3: 'StandardAccountDesc',
            4: 'WordLibraryDesc',
            5: 'KeyValueDesc',
            6: 'ProjectDesc',
            7: 'ProjectServiceTypeDesc',
            8: 'UserDesc',
            9: 'OrganizationDesc',
            10: 'RoleDesc',
            11: 'UserRoleDesc',
            12: 'EnterpriceAccountDesc',
            13: 'TemplateFormulaDesc',
            14: 'TemplateDesc',
            15: 'TemplateGroupDesc',
            16: 'ReportConfigurationDesc',
            17: 'AreaDesc',
            18: 'CustomerDesc',
            19: 'BusinessUnitDesc'
        };

        //点击任意一页事件
        var load_page = function (pageIndex) {
            getLogs(pageIndex);
        };

        var getLogs = function (pageIndex) {

            // $scope.InitType();
            $scope.curPage = pageIndex;

            $scope.paginInfo = {
                totalCount: $scope.queryResult.pageInfo.totalCount,
                pageIndex: pageIndex,
                pageSize: $scope.queryResult.pageInfo.pageSize
            };

            var model = {};
            model.pageInfo = $scope.paginInfo;
            model.logType = $scope.logObj.type;
            model.searchText = $scope.searchText;
            model.moduleName = $scope.logObj.moduleName;
            model.operationObject = $scope.logObj.operationObject;
            if ($scope.filterOperationObjectList) {
                model.filterOperationObjectList = $scope.filterOperationObjectList;
            }

            operationLogService.getOrgLogList(model).success(function (data) {
                if (data != '') {
                    if (data && data.pageInfo && data.pageInfo.totalCount > 0) {
                        var i = 1 + (pageIndex - 1) * $scope.queryResult.pageInfo.pageSize;
                        data.list.forEach(function (row) {
                            row.id = i;
                            row.createTime = $filter('date')(row.createTime, 'yyyy-MM-dd HH:mm');
                            row.operationObject = $translate.instant(row.operationObject);

                            row.comment = $translate.instant(row.comment);
                            row.operationContent = $translate.instant(row.operationContent);
                            row.action = actionMap[row.action];
                            row.originalState = $translate.instant(row.originalState);
                            row.updateState = $translate.instant(row.updateState);
                            i++;
                        });
                        //$scope.operateLogGridOptions.data = data.list;
                        $scope.operateGridDataSource = data.list;
                        $scope.queryResult = data;
                        computeTotalPage();
                    } else {
                        //$scope.operateLogGridOptions.data = data.list;
                        $scope.operateGridDataSource = data.list;
                        $scope.queryResult = data;
                        computeTotalPage();
                    }
                }
            });
        };

        var computeTotalPage = function () {

            if ($scope.queryResult.pageInfo && $scope.queryResult.pageInfo.totalCount > 0) {

                var totalPage = parseInt($scope.queryResult.pageInfo.totalCount / $scope.queryResult.pageInfo.pageSize);
                totalPage = $scope.queryResult.pageInfo.totalCount % $scope.queryResult.pageInfo.pageSize == 0 ? totalPage : totalPage + 1;

                $scope.queryResult.pageInfo.totalPage = totalPage;

                $scope.creatPage = $(".tcdPageCode").createPage({
                    pageCount: totalPage,
                    current: $scope.curPage,
                    backFn: function (p) {
                        //单击回调方法,p是当前页码
                        getLogs(p);
                    }
                });

                $('.tcdPageCode').css('display', 'inline-block');
            } else {
                $scope.creatPage = $(".tcdPageCode").createPage({
                    pageCount: 0,
                    current: $scope.curPage,
                    backFn: function (p) {
                        //单击回调方法,p是当前页码
                        getLogs(p);
                    }
                });

                $('.tcdPageCode').css('display', 'inline-block');
            }
        };

        var prePage = function () {

            if ($scope.curPage > 1) {
                $scope.curPage--;
            }

            getLogs($scope.curPage);
        };

        var nextPage = function () {
            if ($scope.curPage < $scope.queryResult.pageInfo.totalPage) {
                $scope.curPage++;
            }

            loadSAPDataByPageIndex($scope.curPage);
        };

        var normalDataGridOptions = function () {
            var columnNameMap = $scope.logObj;

            $scope.operateGridDataSource = [];

            //var height = $(window).height();

            //var gridHeight = Math.ceil(height * 0.8);

            $scope.operateLogGridOptions = {
                bindingOptions: {
                    dataSource: 'operateGridDataSource'
                },
                // keyExpr: "ID",
                selection: {
                    mode: "single",
                },
                paging: {
                    enabled: false,
                },
                allowColumnResizing: true,
                columnAutoWidth: true,
                showRowLines: true,
                showColumnLines: true,
                rowAlternationEnabled: true,
                showBorders: true,
                width: '1140px',
                height: 460,
                noDataText: $translate.instant('NoDataText'),
                onContentReady: function (e) {
                    $scope.invoiceGridInstance = e.component;
                },
                onSelectionChanged: function (data) {

                },
                columns: [
                    { dataField: 'id', caption: $translate.instant('LogIndex') },
                    { dataField: 'createTime', caption: $translate.instant(commonTitle.logOperationTime) },
                    { dataField: 'operationObject', caption: $translate.instant(commonTitle.logOperateObject), width: 140 },
                    { dataField: 'action', caption: $translate.instant(commonTitle.logOperationDescription) },
                    { dataField: 'operationContent', caption: $translate.instant(commonTitle.logType) },
                    { dataField: 'originalState', caption: $translate.instant(commonTitle.logOriginalState) }, //税额合计小写
                    { dataField: 'updateState', caption: $translate.instant(commonTitle.logUpdateState) }, //税额
                    { dataField: 'operationUser', caption: $translate.instant(commonTitle.logOperationUser), width: 70 }, //开票日期
                    { dataField: 'comment', caption: $translate.instant(commonTitle.logComments) }, //开票日期
                ]

            };

        };

        $scope.$watch('isShow', function (newValue, oldValue) {
            if (newValue) {
                $scope.searchText = '';

                $scope.queryResult = {
                    list: [],
                    pageInfo: {
                        totalCount: -1,
                        pageIndex: 1,
                        pageSize: 100,
                        totalPage: 0,
                    }
                };

                $scope.InitType();
                load_page(1);
                $('#showOperatePop').modal('show');
            }
        });


        // 获取用户机构权限
        var thisPermission = {

            // 获取用户权限
            getUserOrganzationPermission: function () {

                if ($scope.queryOrganizationCode) {
                    userService.getUserPermission(loginContext.userName).success(function (userPermission) {
                        var orgList = thisPermission.getHasPermissionOrgList($scope.queryOrganizationCode, userPermission);
                        var orgNameList = _.pluck(orgList, 'name');
                        $scope.filterOperationObjectList = orgNameList;

                    });
                } else {

                }

            },

            // filter机构列表
            getHasPermissionOrgList: function (permissionCode, permission) {

                var orgList = [];
                if (permission.isAdmin) {

                    permission.organizationPermissionList.forEach(function (row) {

                        orgList.push({

                            id: row.id,
                            name: row.name
                        });
                    });
                } else {

                    permission.organizationPermissionList.forEach(function (row) {
                        var find = _.find(row.permissionList, function (num) {
                            return num.code.indexOf(permissionCode) > -1;
                        });


                        if (find) {
                            orgList.push({
                                id: row.id,
                                name: row.name
                            });
                        }

                    });
                }

                return orgList;

            }
        };

        $scope.closeModal = function () {
            $scope.isShow = false;
        };

        $scope.InitType = function () {
            var url = $location.absUrl();
            //if ($scope.lastUrl === url) {
            //    return;
            //}

            $scope.lastUrl = url;
            var array = url.substr(url.indexOf('#') + 2).split('/');

            $scope.curRoute = array[array.length - 1];


            // 根据logType映射过来的数据
            var columnNameMap = logTypeMap[$scope.curRoute];

            // 弄个默认的
            if (!columnNameMap) {
                if (array.length > 1) {
                    columnNameMap = logTypeMap[array[array.length - 2]];
                }

                if (!columnNameMap) {
                    columnNameMap = logTypeMap.organization;
                }
            }

            $scope.logObj = columnNameMap;

            $scope.logTitle = $translate.instant(columnNameMap.logTitle);
            $scope.searchText = '';

            $scope.queryResult = {
                list: [],
                pageInfo: {
                    totalCount: -1,
                    pageIndex: 1,
                    pageSize: 100,
                    totalPage: 0,
                }
            }

            $scope.curPage = 1;

            thisPermission.getUserOrganzationPermission();
        };

        (function initialize() {
            $log.debug('operateLogController.ctor()...');
            $scope.InitType();
            normalDataGridOptions();

            $scope.load_page = load_page;

        })();
    }
]);