/**
 * @private
 */
Ext.define('Ext.exporter.file.html.Doc', {
    extend: 'Ext.exporter.file.Base',
 
    requires: [
        'Ext.exporter.file.html.Style'
    ],
 
    config: {
        /**
         * @cfg {String} [title="Title"]
         *
         * The title of the html document
         */
        title: "Title",
 
        /**
         * @cfg {String} [author="Sencha"]
         *
         * The author of the generated html file
         */
        author: 'Sencha',
 
        /**
         * @cfg {String} [charset="UTF-8"]
         *
         * Html document charset
         */
        charset: 'UTF-8',
 
        /**
         * @cfg {Ext.exporter.file.html.Style[]} styles
         *
         * Collection of styles available in this workbook
         */
        styles: [],
 
        /**
         * @cfg {Object} table
         */
        table: null
    },
 
    destroy: function() {
        this.setStyles(null);
        this.setTable(null);
        this.callParent();
    },
 
    applyStyles: function(data, dataCollection){
        return this.checkCollection(data, dataCollection, 'Ext.exporter.file.html.Style');
    },
 
    /**
     * Convenience method to add styles.
     * @param {Object/Array} config
     * @returns {Ext.exporter.file.html.Style/Ext.exporter.file.html.Style[]}
     */
    addStyle: function (config) {
        var styles = this.getStyles(),
            items = styles.decodeItems(arguments, 0),
            len = items.length,
            ret = [],
            i, found, item;
 
        // reuse item if already created
        // do not remove and add because used ids will get lost
        for(= 0; i < len; i++) {
            item = items[i];
            found = styles.get(item.getKey());
            ret.push(found ? found : styles.add(item));
            if(found) {
                item.destroy();
            }
        }
 
        return ret.length === 1 ? ret[0] : ret;
    },
 
    /**
     * Convenience method to fetch a style by its id.
     * @param id
     * @returns {Ext.exporter.file.html.Style} 
     */
    getStyle: function(id){
        return this.getStyles().get(id);
    }
 
});