/**
 * @private
 */
Ext.define('Ext.exporter.file.ooxml.excel.Font', {
    extend: 'Ext.exporter.file.ooxml.Base',
 
    config: {
        size: 10,
        fontName: '',
        family: null, // 1: Roman, 2: Swiss, 3: Modern, 4: Script, 5: Decorative
        charset: null,
        bold: false,
        italic: false,
        underline: false,
        outline: false,
        strikeThrough: false,
        color: null, // rgb color
        verticalAlign: null // `baseline`, `superscript`, `subscript`
    },
 
    mappings: {
        family: {
            Automatic: 0,
            Roman: 1,
            Swiss: 2,
            Modern: 3,
            Script: 4,
            Decorative: 5
        }
    },
 
    tpl: [
        '<font>',
        '<tpl if="size"><sz val="{size}"/></tpl>',
        '<tpl if="fontName"><name val="{fontName}"/></tpl>',
        '<tpl if="family"><family val="{family}"/></tpl>',
        '<tpl if="charset"><charset val="{charset}"/></tpl>',
        '<tpl if="bold"><b/></tpl>',
        '<tpl if="italic"><i/></tpl>',
        '<tpl if="underline"><u/></tpl>',
        '<tpl if="outline"><outline/></tpl>',
        '<tpl if="strikeThrough"><strike/></tpl>',
        '<tpl if="color"><color rgb="{color}"/></tpl>',
        '<tpl if="verticalAlign"><vertAlign val="{verticalAlign}"/></tpl>',
        '</font>'
    ],
 
    autoGenerateKey: [
        'size', 'fontName', 'family', 'charset', 'bold', 'italic',
        'underline', 'outline', 'strikeThrough', 'color', 'verticalAlign'
    ],
 
    constructor: function(config) {
        var cfg = {},
            keys = Ext.Object.getKeys(config || {}),
            len = keys.length,
            i;
 
        if (config) {
            for (= 0; i < len; i++) {
                cfg[Ext.String.uncapitalize(keys[i])] = config[keys[i]];
            }
        }
 
        this.callParent([cfg]);
    },
 
    applyFamily: function(value) {
        if (typeof value === 'string') {
            return this.mappings.family[value];
        }
 
        return value;
    },
 
    applyBold: function(value) {
        return !!value;
    },
 
    applyItalic: function(value) {
        return !!value;
    },
 
    applyStrikeThrough: function(value) {
        return !!value;
    },
 
    applyUnderline: function(value) {
        return !!value;
    },
 
    applyOutline: function(value) {
        return !!value;
    },
 
    applyColor: function(value) {
        var v;
 
        if (!value) {
            return value;
        }
 
        v = String(value);
 
        return v.indexOf('#') >= 0 ? v.replace('#', '') : v;
    },
 
    applyVerticalAlign: function(value) {
        return Ext.util.Format.lowercase(value);
    }
});