import { asWritingEntitiesTask } from '../base-application/support/task-type-inference.js';
import { SERVER_MAIN_RES_DIR } from '../generator-constants.js';
import { javaMainPackageTemplatesBlock } from '../server/support/index.js';
const domainFiles = [
    {
        condition: ctx => ctx.entityDomainLayer,
        ...javaMainPackageTemplatesBlock('_entityPackage_'),
        templates: ['domain/_persistClass_.java.jhi.spring_data_couchbase'],
    },
];
const repositoryFiles = [
    {
        condition: generator => !generator.embedded && generator.entityPersistenceLayer,
        ...javaMainPackageTemplatesBlock('_entityPackage_'),
        templates: ['repository/_entityClass_Repository.java'],
    },
];
export const entityFiles = {
    dbChangelog: [
        {
            condition: generator => !generator.skipDbChangelog && !generator.embedded,
            path: SERVER_MAIN_RES_DIR,
            templates: [
                {
                    file: 'config/couchmove/changelog/entity.n1ql',
                    renameTo: generator => `config/couchmove/changelog/V${generator.changelogDate}__${generator.entityInstance.toLowerCase()}.n1ql`,
                },
            ],
        },
        {
            condition: generator => generator.searchEngineCouchbase && !generator.skipDbChangelog && !generator.embedded,
            path: SERVER_MAIN_RES_DIR,
            templates: [
                {
                    file: 'config/couchmove/changelog/entity.fts',
                    renameTo: generator => `config/couchmove/changelog/V${parseInt(generator.changelogDate, 10) + 10}__${generator.entityInstance.toLowerCase()}.fts`,
                },
            ],
        },
    ],
    domainFiles,
    repositoryFiles,
};
export const cleanupCouchbaseEntityFilesTask = asWritingEntitiesTask(function ({ application, entities }) {
    for (const entity of entities.filter(entity => !entity.builtIn && !entity.skipServer)) {
        if (this.isJhipsterVersionLessThan('7.6.1')) {
            this.removeFile(`${application.srcMainResources}config/couchmove/changelog/V${entity.changelogDate}__${entity.entityInstance.toLowerCase()}.fts`);
        }
    }
});
export default asWritingEntitiesTask(async function writeEntityCouchbaseFiles({ application, entities }) {
    for (const entity of entities.filter(entity => !entity.skipServer)) {
        await this.writeFiles({
            sections: entityFiles,
            context: { ...application, ...entity },
        });
    }
});
