import chalk from 'chalk';
import BaseGenerator from '../base/index.mjs';
import statistics from '../statistics.mjs';
import { GENERATOR_EXPORT_JDL } from '../generator-list.mjs';
import { applicationOptions } from '../../jdl/jhipster/index.mjs';
import JSONToJDLConverter from '../../jdl/converters/json-to-jdl-converter.js';
const { OptionNames } = applicationOptions;
const { BASE_NAME } = OptionNames;
export default class extends BaseGenerator {
    baseName;
    jdlFile;
    jdlContent;
    constructor(args, options, features) {
        super(args, options, { skipParseOptions: false, ...features });
        this.argument('jdlFile', { type: String, required: false });
        if (this.options.help) {
            return;
        }
        this.baseName = this.config.get(BASE_NAME);
        this.jdlFile = this.options.jdlFile || `${this.baseName}.jdl`;
    }
    get [BaseGenerator.DEFAULT]() {
        return this.asDefaultTaskGroup({
            insight() {
                statistics.sendSubGenEvent('generator', GENERATOR_EXPORT_JDL);
            },
            convertToJDL() {
                try {
                    const jdlObject = JSONToJDLConverter.convertToJDL(this.destinationPath(), false);
                    if (jdlObject) {
                        this.jdlContent = jdlObject.toString();
                    }
                }
                catch (error) {
                    throw new Error(`An error occurred while exporting to JDL: ${error.message}\n${error}`, { cause: error });
                }
            },
        });
    }
    get [BaseGenerator.WRITING]() {
        return this.asDefaultTaskGroup({
            writeJdl() {
                if (this.jdlContent) {
                    this.writeDestination(this.jdlFile, this.jdlContent);
                }
            },
        });
    }
    get [BaseGenerator.END]() {
        return this.asEndTaskGroup({
            end() {
                this.log.log(chalk.green.bold('\nThe JDL export is complete!\n'));
            },
        });
    }
}
