/**
 * Represents a single record of data in the PivotCache.
 *
 * (CT_Record)
 * @private
 */
Ext.define('Ext.exporter.file.ooxml.excel.Record', {
    extend: 'Ext.exporter.file.ooxml.Base',
 
    config: {
        /**
         * @cfg {Boolean/Number/Date/String[]} items
         *
         * Cell values for this record
         */
        items: null
    },
 
    tplNonAttributes: [
        'items', 'stritems'
    ],
 
    tpl: [
        '<tpl if="stritems">',
        '<r>',
        '{stritems}',
        '</r>',
        '<tpl else>',
        '<r/>',
        '</tpl>'
    ],
 
    numberTpl: '<n v="{0}"/>',
    booleanTpl: '<b v="{0}"/>',
    stringTpl: '<s v="{0}"/>',
    dateTpl: '<d v="{0}"/>',
 
    constructor: function(config) {
        var cfg;
 
        if (Ext.isArray(config) || Ext.isDate(config) || Ext.isPrimitive(config)) {
            cfg = {
                items: config
            };
        }
        else {
            cfg = config;
        }
 
        return this.callParent([cfg]);
    },
 
    getRenderData: function() {
        var me = this,
            data = me.callParent(),
            items = data.items,
            str = '',
            types = [],
            i, len, v, tpl;
 
        if (items) {
            len = items.length;
 
            for (= 0; i < len; i++) {
                v = items[i];
 
                if (== null || v === '') {
                    //
                }
                else {
                    if (typeof v === 'string') {
                        tpl = me.stringTpl;
                        v = Ext.util.Base64._utf8_encode(Ext.util.Format.htmlEncode(v));
                        types.push('s');
                    }
                    else if (typeof v === 'boolean') {
                        tpl = me.booleanTpl;
                        types.push('b');
                    }
                    else if (typeof v === 'number') {
                        tpl = me.numberTpl;
                        types.push('n');
                    }
                    else if (instanceof Date) {
                        tpl = me.dateTpl;
                        v = Ext.Date.format(v, 'Y-m-d\\TH:i:s.u');
                        types.push('d');
                    }
 
                    str += Ext.String.format(tpl, v);
                }
            }
        }
 
        data.stritems = str;
 
        return data;
    },
 
    applyItems: function(items) {
        return items !== null ? Ext.Array.from(items) : null;
    }
});