import { loadClientConfig, loadDerivedClientConfig, preparePostEntityClientDerivedProperties, filterEntitiesAndPropertiesForClient, filterEntitiesForClient, } from '../client/support/index.js';
import BaseApplicationGenerator from '../base-application/index.js';
import { loadStoredAppOptions } from '../app/support/index.js';
import clientCommand from '../client/command.js';
import { loadConfig, loadDerivedConfig } from '../../lib/internal/index.js';
export default class BootStrapApplicationClient extends BaseApplicationGenerator {
    constructor(args, options, features) {
        super(args, options, { jhipsterBootstrap: false, ...features });
        if (this.options.help)
            return;
        loadStoredAppOptions.call(this);
    }
    async beforeQueue() {
        if (!this.fromBlueprint) {
            await this.composeWithBlueprints();
        }
        if (this.delegateToBlueprint) {
            throw new Error('Only sbs blueprint is supported');
        }
        await this.dependsOnBootstrapApplicationBase();
    }
    get loading() {
        return this.asLoadingTaskGroup({
            loadApplication({ application }) {
                loadConfig(clientCommand.configs, { config: this.jhipsterConfigWithDefaults, application });
                loadClientConfig({ config: this.jhipsterConfigWithDefaults, application });
            },
        });
    }
    get [BaseApplicationGenerator.LOADING]() {
        return this.loading;
    }
    get preparing() {
        return this.asPreparingTaskGroup({
            prepareApplication({ application }) {
                loadDerivedConfig(clientCommand.configs, { application });
                loadDerivedClientConfig({ application });
            },
        });
    }
    get [BaseApplicationGenerator.PREPARING]() {
        return this.preparing;
    }
    get postPreparingEachEntity() {
        return this.asPostPreparingEachEntityTaskGroup({
            control({ control }) {
                control.filterEntitiesAndPropertiesForClient = filterEntitiesAndPropertiesForClient;
                control.filterEntitiesForClient = filterEntitiesForClient;
            },
            postPreparingEntity({ entity }) {
                preparePostEntityClientDerivedProperties(entity);
            },
        });
    }
    get [BaseApplicationGenerator.POST_PREPARING_EACH_ENTITY]() {
        return this.postPreparingEachEntity;
    }
}
