let JV = require('./jpc_value_define');
let JpcCommonHelper = require('./helper/jpc_helper_common');
let JpcBandHelper = require('./helper/jpc_helper_band');

let JpcBand = {
    createNew: function(rptTpl, defProperties) {
        let me = this;
        let JpcBandResult = {};
        if (rptTpl[JV.NODE_BAND_COLLECTION]) {
            for (let i = 0; i < rptTpl[JV.NODE_BAND_COLLECTION].length; i++) {
                me.createSingle(rptTpl[JV.NODE_BAND_COLLECTION][i], JpcBandResult, rptTpl, defProperties);
            }
        }
        return JpcBandResult;
    },
    createSingle: function(bandNode, parentObj, rptTpl, defProperties) {
        let me = this;
        if (bandNode && bandNode[JV.BAND_PROP_NAME]) {
            let item = {Left:0, Right:0, Top:0, Bottom:0};
            item[JV.BAND_PROP_STYLE] = JpcCommonHelper.getStyle(bandNode[JV.BAND_PROP_STYLE], defProperties.styles, null);
            item[JV.BAND_PROP_CONTROL] = JpcCommonHelper.getControl(bandNode[JV.BAND_PROP_CONTROL], defProperties.ctrls, null);
            if (bandNode[JV.BAND_PROP_HEIGHT]) {
                item[JV.BAND_PROP_HEIGHT] = 1.0 * bandNode[JV.BAND_PROP_HEIGHT];
            } else {
                item[JV.BAND_PROP_HEIGHT] = 0.0;
            }
            if (bandNode[JV.BAND_PROP_WIDTH]) {
                item[JV.BAND_PROP_WIDTH] = 1.0 * bandNode[JV.BAND_PROP_WIDTH];
            } else {
                item[JV.BAND_PROP_WIDTH] = 0.0;
            }
            item[JV.BAND_PROP_DISPLAY_TYPE] = JpcBandHelper.getBandTypeValByString(bandNode[JV.BAND_PROP_DISPLAY_TYPE]);
            item[JV.BAND_PROP_ALIGNMENT] = JpcCommonHelper.getLayoutAlignment(bandNode[JV.BAND_PROP_ALIGNMENT]);
            item[JV.PROP_CALCULATION] = JpcCommonHelper.getPosCalculationType(bandNode[JV.PROP_CALCULATION]);
            if (bandNode.hasOwnProperty(JV.PROP_BAND_NORMAL_ONLY)) {
                item[JV.PROP_BAND_NORMAL_ONLY] = JpcCommonHelper.getBoolean(bandNode[JV.PROP_BAND_NORMAL_ONLY]);
            }
            if (bandNode.hasOwnProperty(JV.PROP_BAND_EX_ONLY)) {
                item[JV.PROP_BAND_EX_ONLY] = JpcCommonHelper.getBoolean(bandNode[JV.PROP_BAND_EX_ONLY]);
            }

            if (bandNode[JV.BAND_PROP_MERGE_BORDER]) {
                item[JV.BAND_PROP_MERGE_BORDER] = bandNode[JV.BAND_PROP_MERGE_BORDER];
            }
            if (bandNode[JV.BAND_PROP_SUB_BANDS]) {
                for (let i = 0; i < bandNode[JV.BAND_PROP_SUB_BANDS].length; i++) {
                    me.createSingle(bandNode[JV.BAND_PROP_SUB_BANDS][i], parentObj, rptTpl, defProperties);
                }
            }
            parentObj[bandNode[JV.BAND_PROP_NAME]] = item;
            if (item[JV.BAND_PROP_MERGE_BORDER] !== null && item[JV.BAND_PROP_MERGE_BORDER] !== undefined && item[JV.BAND_PROP_MERGE_BORDER] === 'T') {
                parentObj[JV.BAND_PROP_MERGE_BAND] = item;
            }
        }
    }
};

module.exports = JpcBand;