import { merge } from '../utils/object-utils.js';
import JDLEnumValue from './jdl-enum-value.js';
export default class JDLEnum {
    comment;
    name;
    values;
    constructor(args) {
        const merged = merge(defaults(), args);
        if (!merged.name) {
            throw new Error("The enum's name must be passed to create an enum.");
        }
        this.comment = merged.comment;
        this.name = merged.name;
        this.values = new Map(merged.values.map((entry) => [entry.key, new JDLEnumValue(entry.key, entry.value, entry.comment)]));
    }
    getValuesAsString() {
        return stringifyValues(this.values).join(',');
    }
    getValueJavadocs() {
        const documentations = {};
        this.values.forEach(jdlEnumValue => {
            if (jdlEnumValue.comment) {
                documentations[jdlEnumValue.name] = jdlEnumValue.comment;
            }
        });
        return documentations;
    }
    toString() {
        let comment = '';
        if (this.comment) {
            comment += `/**\n * ${this.comment}\n */\n`;
        }
        const values = stringifyValues(this.values);
        return `${comment}enum ${this.name} {\n  ${values.join(',\n  ')}\n}`;
    }
}
function defaults() {
    return {
        values: [],
    };
}
function stringifyValues(jdlEnumValues) {
    const values = [];
    jdlEnumValues.forEach(jdlEnumValue => {
        values.push(jdlEnumValue.toString());
    });
    return values;
}
