import BaseApplicationGenerator from '../base-application/index.js';
import writeTask from './files.js';
import cleanupTask from './cleanup.js';
import writeEntityTask, { cleanupEntitiesTask } from './entity-files.js';
export default class GatlingGenerator extends BaseApplicationGenerator {
    async beforeQueue() {
        if (!this.fromBlueprint) {
            await this.composeWithBlueprints();
        }
        if (!this.delegateToBlueprint) {
            await this.dependsOnBootstrapApplication();
        }
    }
    get writing() {
        return this.asWritingTaskGroup({
            cleanupTask,
            writeTask,
        });
    }
    get [BaseApplicationGenerator.WRITING]() {
        return this.delegateTasksToBlueprint(() => this.writing);
    }
    get writingEntities() {
        return this.asWritingEntitiesTaskGroup({
            cleanupEntitiesTask,
            writeEntityTask,
        });
    }
    get [BaseApplicationGenerator.WRITING_ENTITIES]() {
        return this.delegateTasksToBlueprint(() => this.writingEntities);
    }
    get postWriting() {
        return this.asPostWritingTaskGroup({
            addDependencies({ application, source }) {
                const { javaDependencies } = application;
                if (application.buildToolMaven) {
                    source.addMavenDefinition?.({
                        properties: [
                            { property: 'gatling.version', value: javaDependencies?.gatling },
                            { property: 'gatling-maven-plugin.version', value: javaDependencies?.['gatling-maven-plugin'] },
                        ],
                        dependencies: [
                            { groupId: 'io.gatling.highcharts', artifactId: 'gatling-charts-highcharts', version: '${gatling.version}', scope: 'test' },
                        ],
                        plugins: [{ groupId: 'io.gatling', artifactId: 'gatling-maven-plugin' }],
                        pluginManagement: [
                            {
                                groupId: 'io.gatling',
                                artifactId: 'gatling-maven-plugin',
                                version: '${gatling-maven-plugin.version}',
                                additionalContent: `
<configuration>
    <runMultipleSimulations>true</runMultipleSimulations>
</configuration>
`,
                            },
                        ],
                    });
                }
                if (application.buildToolGradle) {
                    source.addGradleDependencyCatalogVersion?.({ name: 'gatling-plugin', version: javaDependencies?.['gatling-gradle'] });
                    source.addGradleDependencyCatalogVersion?.({ name: 'gatling-highcharts', version: javaDependencies?.gatling });
                    source.addGradleBuildSrcDependencyCatalogVersion?.({ name: 'gatling-plugin', version: javaDependencies?.['gatling-gradle'] });
                    source.addGradleBuildSrcDependencyCatalogVersion?.({ name: 'gatling-highcharts', version: javaDependencies?.gatling });
                    source.addGradleBuildSrcDependency?.({
                        groupId: 'gradle.plugin.io.gatling.gradle',
                        artifactId: 'gatling-gradle-plugin',
                        version: '${libs.versions.gatling.plugin.get()}',
                        scope: 'implementation',
                    });
                    source.addGradlePlugin?.({ id: 'jhipster.gatling-conventions' });
                }
            },
        });
    }
    get [BaseApplicationGenerator.POST_WRITING]() {
        return this.delegateTasksToBlueprint(() => this.postWriting);
    }
}
