/**
 * @private
 */
Ext.define('Ext.exporter.file.ooxml.excel.Fill', {
    extend: 'Ext.exporter.file.ooxml.Base',
 
    requires: [
        'Ext.util.Format'
    ],
 
    config: {
        /**
         * @cfg {String} patternType
         * Possible values:
         * - none
         * - solid
         * - mediumGray
         * - darkGray
         * - lightGray
         * - darkHorizontal
         * - darkVertical
         * - darkDown
         * - darkUp
         * - darkGrid
         * - darkTrellis
         * - lightHorizontal
         * - lightVertical
         * - lightDown
         * - lightUp
         * - lightGrid
         * - lightTrellis
         * - gray125
         * - gray0625
         */
        patternType: 'none',
 
        fgColor: null,
        bgColor: null
    },
 
    tpl: [
        '<fill>',
        '<tpl if="fgColor || bgColor">',
        '<patternFill patternType="{patternType}">',
        '<tpl if="fgColor"><fgColor rgb="{fgColor}"/></tpl>',
        '<tpl if="bgColor"><bgColor rgb="{bgColor}"/></tpl>',
        '</patternFill>',
        '<tpl else>',
        '<patternFill patternType="{patternType}"/>',
        '</tpl>',
        '</fill>'
    ],
 
    autoGenerateKey: ['patternType', 'fgColor', 'bgColor'],
 
    constructor: function(config) {
        var cfg = Ext.clone(config);
 
        if (config) {
            cfg.patternType = cfg.patternType || config.pattern;
            cfg.bgColor = cfg.bgColor || (cfg.patternType !== 'solid' ? config.color : null);
            cfg.fgColor = cfg.fgColor || (cfg.patternType === 'solid' ? config.color : null);
        }
 
        this.callParent([cfg]);
    },
 
    formatColor: function(value) {
        var v;
 
        if (!value) {
            return value;
        }
 
        v = String(value);
 
        return v.indexOf('#') >= 0 ? v.replace('#', '') : v;
    },
 
    applyFgColor: function(value) {
        return this.formatColor(value);
    },
 
    applyBgColor: function(value) {
        return this.formatColor(value);
    },
 
    applyPatternType: function(value) {
        var possible = ['none', 'solid', 'mediumGray', 'darkGray', 'lightGray', 'darkHorizontal',
                        'darkVertical', 'darkDown', 'darkUp', 'darkGrid', 'darkTrellis',
                        'lightHorizontal', 'lightVertical', 'lightDown', 'lightUp', 'lightGrid',
                        'lightTrellis', 'gray125', 'gray0625'],
            v = Ext.util.Format.uncapitalize(value);
 
        return Ext.Array.indexOf(possible, v) >= 0 ? v : 'none';
    }
});