import chalk from 'chalk';
import { createNeedleCallback } from './base/support/needles.js';
export default class {
    generator;
    constructor(generator) {
        this.generator = generator;
    }
    get clientSrcDir() {
        return this.generator.sharedData.getApplication().clientSrcDir;
    }
    get clientFramework() {
        return this.generator.sharedData.getApplication().clientFramework;
    }
    addBlockContentToFile(rewriteFileModel, errorMessage) {
        const ignoreNonExisting = errorMessage ?? true;
        const { path: rewritePath, file } = rewriteFileModel;
        let fullPath;
        if (rewritePath) {
            fullPath = this.generator.destinationPath(rewritePath, file);
        }
        else {
            fullPath = this.generator.destinationPath(file);
        }
        this.generator.editFile(fullPath, { ignoreNonExisting }, createNeedleCallback({
            needle: rewriteFileModel.needle,
            contentToAdd: rewriteFileModel.splicable,
            contentToCheck: rewriteFileModel.regexp,
            ignoreWhitespaces: rewriteFileModel.prettierAware,
            autoIndent: false,
        }));
    }
    editFile(fullPath, errorMessage, needleData) {
        const ignoreNonExisting = errorMessage ?? true;
        this.generator.editFile(fullPath, { ignoreNonExisting }, createNeedleCallback(needleData));
    }
    logNeedleNotFound(exception, message, fullPath) {
        if (!message) {
            message = 'File rewrite failed.';
        }
        this.generator.log(chalk.yellow('\nUnable to find ') + fullPath + chalk.yellow(` or missing required jhipster-needle. ${message}\n`));
        this.generator.log.debug('Error:', exception);
    }
    generateFileModelWithPath(aPath, aFile, needleTag, ...content) {
        return Object.assign(this.generateFileModel(aFile, needleTag, ...content), { path: aPath });
    }
    generateFileModel(aFile, needleTag, ...content) {
        return {
            file: aFile,
            needle: needleTag,
            splicable: content,
        };
    }
}
