// indexAnalysis
frameworkModule.directive('appIndexAnalysis', ['$log', '$translate', '$timeout', 'vatSessionService', 'dashboardConfigSummaryService', 'vatDashboardService',
    function ($log, $translate, $timeout, vatSessionService, dashboardConfigSummaryService, vatDashboardService) {
        'use strict';
        $log.debug('appIndexAnalysis.ctor()...');

        return {
            restrict: 'A',
            templateUrl: '/app/dashboard/app-index-analysis/app-index-analysis.html' + '?_=' + Math.random(),
            replace: true,
            scope: true,
            link: function (scope, element) {
                var thisConstant = {
                    filterMonth: 'filterMonth',
                    dateFormate: 'yyyy-MM',
                    dashSignSeparator: '-',
                    rowCountPerPage: 9,
                    defaultHeight: 400,
                    orgColumn: 'v1',
                    prefixField: 'v'
                };

                var thisDateService = {

                    // 获取当前月份的上一个月时间
                    getLastMonth: function () {
                        var date = new Date();
                        date.setMonth(date.getMonth() - 1);
                        return date;
                    },

                    // 获取查询条件
                    getQueryModel: function () {
                        var arr = scope.filterMonth.split(thisConstant.dashSignSeparator);
                        var year = parseInt(arr[0]);
                        var month = parseInt(arr[1]);

                        var model = {
                            year: year,
                            period: month,
                            organizationIDList: scope.selectedOrganizationList
                        };

                        return model;
                    },

                    // 验证有效月份
                    validDateMonth: function () {
                        var date = scope.filterMonth + '-01';
                        return window.PWC.checkDate(date);
                    },

                    // 转换为页面展示数据
                    parseShowData: function (data) {
                        if (!_.isEmpty(data)) {
                            var values = _.values(data.header);
                            var keys = _.keys(data.header);
                            var length = keys ? keys.length : 0;
                            data.keys = keys;
                            data.headerObj = JSON.parse(data.headerObj);
                        }

                        return data;
                    },

                    // 查询汇总数据
                    querySummaryProcess: function () {
                        if (!thisDateService.validDateMonth) {
                            return;
                        }

                        var model = thisDateService.getQueryModel();
                        vatSessionService.querySummayDashboardModel = model;
                        dashboardConfigSummaryService.querySingleSummaryData(model, scope.widget.dataModel.chartConfig).success(function (data) {
                            // 进行数据转换
                            scope.querySummaryResult = thisDateService.parseShowData(data);
                            if (!_.isEmpty(scope.querySummaryResult)) {
                                scope.hasData = true;
                            } else {
                                scope.hasData = false;
                            }

                            $timeout(function () {
                                thisDateService.drawTableList(scope.querySummaryResult);
                            }, 100);
                        });
                    },

                    drawTableList: function (data) {
                        if (!_.isEmpty(data)) {
                            thisDateService.drawTable(data);
                        }
                    },

                    drawTable: function (node) {
                        if (_.isEmpty(node.data)) {
                            node.isEmpty = true;
                        }
                        else {
                            node.isEmpty = false;
                            var vatGallery = thisDateService.createGalleryData(node);

                            var itemTemplate = function (item, index) {
                                var columns = thisDateService.createColumns(node);
                                if (index === 0) {
                                    var blankAreaHeight = (thisConstant.rowCountPerPage - item.dataValue.length) * 40;
                                    var newHeight = thisConstant.defaultHeight - blankAreaHeight;
                                    $timeout(function () {
                                        element.find('.table-content').height(newHeight);
                                    }, 100);
                                }

                                return $('<div class="gallery-table"/>').dxDataGrid({
                                    dataSource: item.dataValue,
                                    width: '100%',
                                    showRowLines: true,
                                    showColumnLines: false,
                                    noDataText: '',
                                    cellHintEnabled: true,
                                    showBorders: false,
                                    format: { type: 'fixedPoint', precision: 2 },
                                    columns: columns
                                });

                            };
                            var galleryWidget = element.find('.table-content').dxGallery({
                                dataSource: vatGallery,
                                loop: false,
                                width: '100%',
                                showIndicator: true,
                                noDataText: '',
                                showNavButtons: true,
                                itemTemplate: itemTemplate,

                            }).dxGallery("instance");
                        }
                    },
                    // 构造GalleryData
                    createGalleryData: function (node) {

                        var index = Math.ceil(node.data.length / thisConstant.rowCountPerPage);
                        // var x = node.data.length % thisConstant.rowCountPerPage;
                        // if (x !== 0) {
                        //     index = index + 1;
                        // }

                        var result = [];
                        for (var i = 0; i < index; i++) {
                            var item = {};
                            item.id = i;
                            item.dataValue = [];
                            var start = i * thisConstant.rowCountPerPage;
                            for (var j = start; j < start + thisConstant.rowCountPerPage; j++) {
                                var rowData = angular.copy(node.data[j]);
                                if (!rowData) {
                                    continue;
                                }

                                for (var k = 1; k < node.headerObj.length; k++) {
                                    var dataModel = node.headerObj[k];
                                    var field = thisConstant.prefixField + (k + 1);
                                    if (dataModel.dataType === 1) {
                                        rowData[field] = Number(rowData[field]).formatAmount();

                                    } else if (dataModel.dataType === 3) {
                                        rowData[field] = rowData[field] == 1 ? '是' : '否';
                                    }
                                    else {
                                        var percentData = Number(rowData[field]) * 100;
                                        rowData[field] = Number(percentData).formatAmount() + '%';
                                    }
                                }
                                item.dataValue.push(rowData);
                            }

                            result.push(item);
                        }

                        return result;
                    },

                    // 构造列表
                    createColumns: function (node) {
                        var result = [];
                        node.keys.forEach(function (key) {
                            var item = {};
                            item.dataField = key,
                                item.caption = $translate.instant(node.header[key]);
                            if (key !== thisConstant.orgColumn) {
                                item.format = { type: 'fixedPoint' };
                                item.cssClass = 'orange-color';
                                item.alignment = 'right';
                            }

                            result.push(item);
                        });

                        return result;
                    },

                    isChangedArray: function (newValue, oldValue) {
                        if (!newValue && !oldValue) {
                            return false;
                        }

                        if (!newValue) {
                            return true;
                        }

                        if (!oldValue) {
                            return true;
                        }

                        if (newValue.length !== oldValue.length) {
                            return true;
                        }

                        // 排序
                        newValue = newValue.sort();
                        oldValue = oldValue.sort();

                        for (var i = 0; i < newValue.length; i++) {
                            if (newValue[i] !== oldValue[i]) {
                                return true;
                            }
                        }

                        return false;
                    },
                    querySummary: function (queryModel) {
                        if (thisDateService.isChangedArray(queryModel, scope.selectedOrganizationList)) {
                            scope.selectedOrganizationList = queryModel;
                            thisDateService.querySummaryProcess();
                        }
                    }
                };

                var mainModule = {

                    // 初始化参数
                    initParams: function () {
                        scope.selectedOrganizationList = [];
                        scope.hasData = true;
                        mainModule.initFilterMonth();

                        mainModule.watchFilter();
                    },

                    // 初始化查询月份
                    initFilterMonth: function () {

                        //if (vatSessionService.lastDashboardSummaryQueryMonth) {
                        //    scope.filterMonth = vatSessionService.lastDashboardSummaryQueryMonth;
                        //} else {
                        //    var lastmonth = thisDateService.getLastMonth();
                        //    scope.filterMonth = lastmonth.formatDateTime(thisConstant.dateFormate);
                        //}

                        // TODO: Dashboard Demo for Edmond
                        var lastmonth = new Date(2017, 0, 1);
                        scope.filterMonth = lastmonth.formatDateTime(thisConstant.dateFormate);

                        var elem1 = $("#" + thisConstant.filterMonth);
                        elem1.datepicker({
                            minViewMode: 1,
                            autoclose: true,
                            language: "zh-CN",
                            format: "yyyy-mm",
                        });

                        elem1.datepicker('setDate', lastmonth);
                    },

                    // 监视查询条件变更
                    watchFilter: function () {

                        // 日期选择改变时
                        scope.$watch('filterMonth', function (newValue, oldValue) {
                            if (newValue !== oldValue) {
                                vatSessionService.lastDashboardSummaryQueryMonth = newValue;
                                thisDateService.querySummaryProcess();
                            }
                        });
                    },

                    // 入口函数
                    main: function () {
                        mainModule.initParams();
                    }
                };

                //开始
                (function initialize() {
                    $log.debug('appIndexAnalysis.link.initialize()...');
                    scope.querySummary = thisDateService.querySummary;
                    scope.showFilter = false;
                    mainModule.main();
                })();
            }
        };
    }
]);