/**
 * Copyright 2013-2026 the original author or authors from the JHipster project.
 *
 * This file is part of the JHipster project, see https://www.jhipster.tech/
 * for more information.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import chalk from 'chalk';
import { parse as parseYaml } from 'yaml';
import { mutateData } from "../../../../lib/utils/object.js";
import BaseSimpleApplicationGenerator from "../../../base-simple-application/index.js";
export default class BootstrapGenerator extends BaseSimpleApplicationGenerator {
    async beforeQueue() {
        if (!this.fromBlueprint) {
            await this.composeWithBlueprints();
        }
        if (this.options.commandName?.startsWith('ci-cd')) {
            await this.dependsOnBootstrap('app');
        }
    }
    get initializing() {
        return this.asInitializingTaskGroup({
            sayHello() {
                if (this.options.commandName?.startsWith('ci-cd')) {
                    this.log.log(chalk.white('Welcome to the JHipster CI/CD Sub-Generator'));
                }
            },
        });
    }
    get [BaseSimpleApplicationGenerator.INITIALIZING]() {
        return this.delegateTasksToBlueprint(() => this.initializing);
    }
    get loading() {
        return this.asLoadingTaskGroup({
            loadDependabotVersions({ applicationDefaults }) {
                applicationDefaults({
                    githubActions: () => ({}),
                    ciCdIntegrations: () => [],
                });
            },
        });
    }
    get [BaseSimpleApplicationGenerator.LOADING]() {
        return this.delegateTasksToBlueprint(() => this.loading);
    }
    get preparing() {
        return this.asPreparingTaskGroup({
            async preparing({ application }) {
                const dependabotConfig = parseYaml(this.readJHipsterResource('dependabot/action.yml'));
                mutateData(application.githubActions, Object.fromEntries(dependabotConfig.runs.steps
                    .map(({ uses }) => uses.split('@'))
                    .map(([name, version]) => [name, `${name}@${this.useVersionPlaceholders ? 'VERSION' : version}`])));
            },
        });
    }
    get [BaseSimpleApplicationGenerator.PREPARING]() {
        return this.delegateTasksToBlueprint(() => this.preparing);
    }
}
