import chalk from 'chalk';
import BaseGenerator from '../base/index.js';
import { applicationOptions } from '../../jdl/jhipster/index.js';
import JSONToJDLConverter from '../../jdl/converters/json-to-jdl-converter.js';
import ndmJSONToJDLConverter from '../../jdl/converters/ndm-to-jdl-convert.js';
import pdManJSONToJDLConverter from '../../jdl/converters/pdman-to-jdl-convert.js';
const { OptionNames } = applicationOptions;
const { BASE_NAME } = OptionNames;
export default class extends BaseGenerator {
    baseName;
    inputFile;
    jdlFile;
    jdlContent;
    constructor(args, options, features) {
        super(args, options, { skipParseOptions: false, ...features });
        this.argument('jdlFile', { type: String, required: false });
        this.argument('inputFile', { type: String, required: false });
        if (this.options.help) {
            return;
        }
        this.inputFile = this.options.inputFile || '';
        if (this.inputFile) {
            this.baseName = '';
        }
        else {
            this.baseName = this.config.get(BASE_NAME);
        }
        this.jdlFile = this.options.jdlFile || `${this.baseName}.jdl`;
    }
    get [BaseGenerator.DEFAULT]() {
        return this.asDefaultTaskGroup({
            convertToJDL() {
                try {
                    let jdlObject = null;
                    if (!this.inputFile) {
                        jdlObject = JSONToJDLConverter.convertToJDL(this.destinationPath(), false);
                    }
                    else if (this.inputFile.endsWith('.ndm2')) {
                        jdlObject = ndmJSONToJDLConverter.convertNdmToJDL('.', this.inputFile, this.jdlFile);
                    }
                    else if (this.inputFile.endsWith('.json')) {
                        jdlObject = pdManJSONToJDLConverter.convertPdManToJDL('.', this.inputFile, this.jdlFile);
                    }
                    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'));
            },
        });
    }
}
