/**
 * @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 (i = 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);
    }
});
