/**
 * Created by Tony on 2017/6/26.
 */
'use strict'
const PRE_PAGE_OFFSET = 150;
const NEXT_PAGE_OFFSET = 160;
const FIRST_PAGE_OFFSET = 50;
const LAST_PAGE_OFFSET = 60;
const WAIT_TIME_EXPORT = 12000;
let fontSuffixMapObj = {"表标题": "title", "列标题": "column", "正文内容": "content", "合计": "summary", "表眉/表脚": "header_footer"};
let rptTplObj = {
    hasInitialized: false,
    pdfFont: {'SmartSimsun': [], 'simhei': [], 'simkai': []},
    iniPage: function() {
        let me = this;
        if (!me.hasInitialized) {
            zTreeOprObj.getReportTemplateTree();
            zTreeOprObj.selectedPrjIDs = [];
            me.hasInitialized = true;
            zTreeOprObj.canvas = document.getElementById("rptCanvas");
            // canvas.onclick = canvasOprObj.canvasOnClick;
            // canvas.onmousemove = canvasOprObj.canvasOnMouseMove;
            dynamicLoadJs('/public/jspdf/Arial Narrow-normal.js');
            dynamicLoadJs('/public/jspdf/Arial Narrow-bold.js');
            dynamicLoadJs('/public/jspdf/Arial Narrow-italic.js');
            dynamicLoadJs('/public/jspdf/Arial Narrow-bolditalic.js');
            // dynamicLoadJs('/public/jspdf/SmartSimsun-normal.js');
            // dynamicLoadJs('/public/jspdf/SmartSimsun-bold.js', me.pdfFontSimsunCallBack);
        }
    },
    pdfFontSimsunCallBack: function() {
        rptTplObj.pdfFont['SmartSimsun'].push('normal');
        rptTplObj.pdfFont['SmartSimsun'].push('bold');
    },
    pdfFontSimkaiCallBack: function() {
        rptTplObj.pdfFont['simkai'].push('normal');
        rptTplObj.pdfFont['simkai'].push('bold');
    },
    pdfFontSimheiCallBack: function() {
        rptTplObj.pdfFont['simhei'].push('normal');
        rptTplObj.pdfFont['simhei'].push('bold');
    }
}
let zTreeOprObj = {
    treeObj: null,
    prjFolderTreeObj: null,
    currentNode: null,
    checkedRptTplNodes: null,
    currentRptPageRst: null,
    defReportPageCfg: null,
    currentPage: 1,
    maxPages: 0,
    canvas: null,
    selectedPrjIDs: [],
    countChkedRptTpl: function () {
        let me = zTreeOprObj;
        if (me.treeObj) {
            me.checkedRptTplNodes = [];
            let chkNodes = me.treeObj.getCheckedNodes(true), cnt = 0, hasCurrentNode = false;
            for (let node of chkNodes) {
                if (node.nodeType === TPL_TYPE_TEMPLATE) {
                    cnt++;
                    me.checkedRptTplNodes.push(node);
                    if (me.currentNode === node) hasCurrentNode = true;
                }
            }
            if (!hasCurrentNode && cnt === 0 && me.currentNode !== null) {
                //这里根据实际需求再做处理
                cnt++;
                me.checkedRptTplNodes.push(me.currentNode);
            }
            $("#print_div").find("span").each(function(cIdx,elementSpan){
                elementSpan.innerText = cnt;
            });
            $("#export_div").find("span").each(function(cIdx,elementSpan){
                elementSpan.innerText = cnt;
            });
        }
    },
    getReportTemplateTree: function() {
        let me = zTreeOprObj;
        let private_remove_hide_item = function (items, nlv) {
            if (items && items.length > 0) {
                for (let i = items.length - 1; i >= 0; i--) {
                    if (!(items[i].released) && items[i].nodeType === 2) {
                        items.splice(i, 1);
                    } else {
                        if (items[i].items && items[i].items.length > 0) {
                            private_remove_hide_item(items[i].items, nlv + 1);
                            if (items[i].items.length === 0 && nlv > 0) {
                                items.splice(i, 1);
                            }
                        }
                    }
                }
            }
        };
        let nodeLv = 0;
        private_remove_hide_item(TOP_TREE_NODES, nodeLv);
        zTreeHelper.createTreeDirectly(TOP_TREE_NODES, rpt_tpl_setting, "rptTplTree", me);
        me.refreshNodes();
    },
    getCustomerCfg: function() {
        let me = zTreeOprObj;
        me.defReportPageCfg = {};
        Object.assign(me.defReportPageCfg, CUST_CFG);
        me.defReportPageCfg.margins = {};
        Object.assign(me.defReportPageCfg.margins, CUST_CFG.margins);
        me.defReportPageCfg.fonts = [];
        for (let fi = 0; fi < CUST_CFG.fonts.length; fi++) {
            me.defReportPageCfg.fonts.push({});
            Object.assign(me.defReportPageCfg.fonts[fi], CUST_CFG.fonts[fi]);
        }
    },
    iniFontCfgDom: function (cfg) {
        for (let font of cfg.fonts) {
            let domArrs = [];
            let fontPropSuffix = fontSuffixMapObj[font.CfgDispName];
            domArrs.push("
");
            //1. label
            domArrs.push("
" + font.CfgDispName + "
");
            //2. font name
            domArrs.push("
");
            domArrs.push("");
            domArrs.push("
");
            //3. font height
            domArrs.push("
");
            domArrs.push("");
            domArrs.push("
");
            //4. font bold italic underline
            domArrs.push("
");
            domArrs.push("
");
            domArrs.push("
");
            domArrs.push("
");
            domArrs.push("
");
            //
            domArrs.push("