Source: package/theme/theme.js

import { BuildableComponent } from '../component/buildable_component.js';
import { Reporter } from '../../reporter/reporter.js';
import { checkPropTypes } from '../../lib.js';
import { Component } from '../../component/component.js';
import { ThemeGroup } from '../theme/theme_group.js';
import { WrappedImage } from '../image/wrapped_image.js';
import { Project } from '../../project.js';

/** Connector */
class Theme extends BuildableComponent {


    /**
     * @param {Reporter} reporter
     * @param {Object} settings
     * @param {UUID} [settings.id]
     * @param {string} settings.name
     * @param {ThemeGroup} settings.group
     * @param {WrappedImage} [settings.thumbnail]
     */

    constructor(reporter, settings) {

        // this component should not be auto linked in parent class

        super(reporter, settings);

        checkPropTypes(
            settings,
            {
                name: 'string',
                group: ThemeGroup
            },
            {}
        );       

        // this.exportName = 'themes';
    }


    static _exportName = {
        singular: 'theme',
        plural: 'themes'
    };


    /**
     * Collect material categories of this type from the package
     * @protected
     */

    async _build(part,quality) {
        
        switch (part) {
            
            case 'UI':
                if (this._settings.thumbnail) {
                    this._setContent('UI', quality, this._settings.thumbnail.content.main[quality]);
                }
                else {
                    this._setContent('UI', quality, Project.defaultImages.missing.cloneNode(true));
                }
                break;

            case 'main':

                for (let setQuality of Component.qualities) {

                    this._setContent('main', setQuality, {
                        "id": this._settings.id,
                        "name": this._settings.name,
                        "group": this._settings.group.id
                    });

                }

                // this.report({ msg: `Built theme` });

                break;

            default:

                this._setContent(part, quality, null);
                
                break;
        }

        return this;
    }


}

export { Theme };