invoiceModule.controller('modelMappingConfigurationController', ['$scope', '$log', '$timeout', '$translate',
    'messagebox', 'vatOutputInvoiceManageService',
function ($scope, $log, $timeout, $translate, messagebox, vatOutputInvoiceManageService) {
    var mappingGridInstance = null;
  
    //初始化mapping datagrid 树
    var initMappingGrid = function () {
        $scope.dataMappingGridOptions = {
            keyExpr: "id",
            height: '300px',
            showRowLines: true,
            showColumnLines: true,
            showBorders: true,
            allowColumnResizing: true,
            allowColumnReordering: false,
            columnAutoWidth: true,
            hoverStateEnabled: true,
            bindingOptions: {
                dataSource: 'mappingDataSource'
            },
            selection: {
                mode: "single"
            },
            sorting: {
                mode: 'none'
            },
            paging: {
                enabled: false,
            },
            onSelectionChanged: function (data) {
                $scope.selectedItem = data.selectedRowsData;
            },
            onContentReady: function (e) {
                mappingGridInstance = e.component;
            },
            columns: [
                { dataField: 'id', visible: false },
                { dataField: 'modelSeries', visible: false },
                { dataField: 'cabinConfiguration', visible: false },
                {
                    caption: $translate.instant('ModelSeries') + ' - '
                        + $translate.instant('CabinConfiguration'),
                    alignment: 'center',
                    calculateCellValue: function (data) {
                        return data.modelSeries + '-' + data.cabinConfiguration;
                    }
                },
                {
                    dataField: 'makeAndModel',
                    caption: $translate.instant('MakeAndModel'),
                    alignment: 'center'
                },
            ]
        };
    };

    var refreshDataSource = function () {
        return vatOutputInvoiceManageService.getModelMappingConfig().then(function (data) {
            if (data && data.data) {
                $scope.mappingDataSource = data.data;
            }
            else {
                $scope.mappingDataSource = [];
            }

            $timeout(function () {
                $scope.selectedItem = mappingGridInstance.getSelectedRowsData();
            }, 100);
        });
    };

    //关闭弹窗口
    $scope.hidePopPanel = function () {
        $scope.$parent.isOpen = false;
        $scope.$dismiss({ $value: 'cancel' });
    };

    $scope.addMapping = function () {
        $scope.eventService.addOrEdit(refreshDataSource);
    };

    $scope.editMapping = function () {
        if (_.isEmpty($scope.selectedItem) || _.isEmpty($scope.selectedItem[0])) {
            messagebox.warning('SelectMappingCheck');
            return;
        }

        $scope.eventService.addOrEdit(refreshDataSource, $scope.selectedItem[0]);
    };

    $scope.deleteMapping = function () {
        if (_.isEmpty($scope.selectedItem) || _.isEmpty($scope.selectedItem[0])) {
            messagebox.confirm('SelectMappingCheck');
            return;
        }

        messagebox.confirm($translate.instant('ConfirmCancelMapping'), '', constant.teslaConfirmClassName).then(function (isConfirm) {
            if (isConfirm) {
                vatOutputInvoiceManageService.deleteModelMappingConfig($scope.selectedItem[0].id)
                    .then(function (data) {
                        if (!data || !data.data) {
                            messagebox.warning('UnknownError');
                        }
                        else if (!data.data.result) {
                            messagebox.warning(_.isEmpty(data.data.resultMsg) ? 'UnknownError' : data.data.resultMsg);
                        }
                        else {
                            refreshDataSource();
                        }
                    });
            }
        });
    };

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

        $scope.selectedItem = null;
        initMappingGrid();
        refreshDataSource();
    })();
}]);