// web service proxy for standard account
webservices.factory('templateService', ['$log', '$http', '$q', 'apiConfig', 'httpCacheService', '$timeout', '$rootScope', '$interval', 'loginContext',
    function ($log, $http, $q, apiConfig, httpCacheService, $timeout, $rootScope, $interval, loginContext) {
        'use strict';

        var getTemplateJson = function (templateID) {
            //return $http.get('/template/getTemplateJson?templateID=' + templateID, apiConfig.create());
            //var url = '/template/getTemplateJson?templateID=' + templateID;
            //var result = httpCacheService.get(url);
            // if (result.finishedCache) {
            //     return result;
            // } else {
            return getJsonFromExcel(templateID);
            //}
        };


        var getCookie = function (cname) {
            var name = cname + "=";
            var ca = document.cookie.split(';');
            for (var i = 0; i < ca.length; i++) {
                var c = ca[i].trim();
                // if (c.indexOf(name) == 0) return c.substring(name.length, c.length);
                if (c.indexOf(name) === 0) return ATMS_EXTRA.decodeCookieValue(c.substring(name.length, c.length));
            }
            return "";
        };

        var initSpreadExcel = function (id, ssjsondata) {

            var deferred = $q.defer();
            var promise = deferred.promise;

            var spread = new GC.Spread.Sheets.Workbook(document.getElementById(id));
            spread.suspendPaint();
            spread.fromJSON(ssjsondata);
            spread.options.showVerticalScrollbar = true;
            spread.options.showHorizontalScrollbar = true;
            spread.options.scrollbarMaxAlign = true;
            spread.options.scrollbarShowMax = true;
            spread.options.tabNavigationVisible = true;
            if(constant.regesterInformation.active){
                spread.options.tabEditable = false;
                spread.options.tabStripVisible = false;
                spread.options.newTabVisible = false;
            }
            spread.options.allowUndo = false;
            spread.options.allowUserResize = false;
            spread.options.allowUserDragDrop = false;
            spread.options.allowUserDragFill = false;
            spread.options.allowUserEditFormula = false;
            spread.options.allowContextMenu = false;
            spread.resumePaint();

            var sheet;
            if (constant.regesterInformation.active) {
                sheet = spread.getActiveSheet();
            }
            else {
                sheet = spread.getSheet(1);
            }

            if (sheet != null) {
                sheet.options.rowHeaderVisible = true;
                sheet.options.colHeaderVisible = true;
                sheet.options.gridline.showVerticalGridline = false;
                sheet.options.gridline.showHorizontalGridline = false;
                sheet.options.isProtected = true;
            }

            deferred.resolve(spread);
            return promise;
        };

        var getJsonFromExcel = function (templateID) {
            var deferred = $q.defer();
            var promise = deferred.promise;
            var url = loginContext.apiHost + constant.webapi.prefix + '/template/getTemplateJson?templateID=' + templateID;
            var xhr = new XMLHttpRequest();
            xhr.open('POST', url, true);    // 也可以使用POST方式,根据接口
            xhr.responseType = "blob";  // 返回类型blob
            var apiTokenObj = JSON.parse(getCookie('AtmsApiToken'));
            var apiToken = apiTokenObj.access_token;
            var tokenType = apiTokenObj.token_type;
            xhr.setRequestHeader('Authorization', tokenType + ' ' + apiToken);
            // 定义请求完成的处理函数,请求前也可以增加加载框/禁用下载按钮逻辑
            xhr.onload = function () {
                // 请求完成
                if (this.status === 200) {
                    // 返回200
                    var blob = this.response;
                    var excelIo = new GC.Spread.Excel.IO();
                    excelIo.open(blob, function (json) {
                        deferred.resolve(json);
                    }, function (e) {
                        console.error(e.errormessage);
                        //alert(e.errorMessage);
                        deferred.reject(e.errorMessage);
                    }, {});
                }
            };
            // 发送ajax请求
            xhr.send();
            return promise;

        };

        var renderSpreadExcelSimple = function (id, templateID) {
            var deferred = $q.defer();
            var promise = deferred.promise;
            var spreadSheet;

            getJsonFromExcel(templateID).then(function (json) {
                spreadSheet = initSpreadExcel(id, json);
                deferred.resolve(spreadSheet);
            });

            return promise;
        };

        var setRowColName = function (id, rowCellInfo) {
            return $http.post('/template/rowColName/' + id, rowCellInfo, apiConfig.create());
        };

        return {
            renderSpreadExcelSimple: renderSpreadExcelSimple,
            setRowColName: setRowColName,
            getTemplateJson: getTemplateJson
        };
    }]);