"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = default_1;
const tslib_1 = require("tslib");
const devkit_1 = require("@nx/devkit");
const path = require("path");
function normalizeOptions(options) {
    const { fileName, className, propertyName } = (0, devkit_1.names)(options.name);
    return Object.assign(Object.assign({}, options), { fileName, className: className, propertyName: propertyName, group: options.group || 'editors', icon: options.icon || 'fa-solid fa-cube', description: options.description || `Inputs ${options.name}` });
}
function default_1(tree, options) {
    return tslib_1.__awaiter(this, void 0, void 0, function* () {
        const normalizedOptions = normalizeOptions(options);
        const { fileName, className, group, icon, description, propertyName } = normalizedOptions;
        // ایجاد مسیر پوشه برای ویجت جدید
        const widgetDir = `libs/platform/widgets/src/lib/widgets/${group}/${fileName}`;
        // ایجاد فایل‌ها با استفاده از الگوها
        (0, devkit_1.generateFiles)(tree, path.join(__dirname, 'files'), widgetDir, {
            fileName,
            className,
            icon,
            description,
            group,
            propertyName,
            tmpl: '',
        });
        // بروزرسانی فایل اصلی index.ts
        const indexFile = 'libs/platform/widgets/src/lib/widgets/index.ts';
        if (tree.exists(indexFile)) {
            const content = tree.read(indexFile, 'utf-8');
            const exportLine = `export * from './${group}/${fileName}';\n`;
            // پیدا کردن محل مناسب برای اضافه کردن export جدید
            // جستجو برای بخش گروه مرتبط (مثلاً export * from './editors/...)
            const groupPattern = new RegExp(`export \\* from '\\.\\/${group}\\/`);
            let updatedContent = content;
            if (groupPattern.test(content)) {
                // پیدا کردن آخرین export در این گروه
                const lines = content.split('\n');
                let lastIndex = -1;
                for (let i = 0; i < lines.length; i++) {
                    if (groupPattern.test(lines[i])) {
                        lastIndex = i;
                    }
                    else if (lastIndex !== -1 && !lines[i].includes(`export * from './${group}/`)) {
                        // اگر به خط بعدی که دیگر export از این گروه نیست رسیدیم
                        break;
                    }
                }
                if (lastIndex !== -1) {
                    // درج export جدید بعد از آخرین export از این گروه
                    lines.splice(lastIndex + 1, 0, exportLine);
                    updatedContent = lines.join('\n');
                }
                else {
                    // اگر گروه موجود نبود، آن را در آخر اضافه کنیم
                    updatedContent += `\n${exportLine}`;
                }
            }
            else {
                // اگر گروه موجود نبود، آن را در آخر اضافه کنیم
                updatedContent += `\n// ${group}\n${exportLine}`;
            }
            tree.write(indexFile, updatedContent);
        }
        // بروزرسانی فایل widget-catalog.ts برای اضافه کردن ویجت جدید
        const catalogFile = 'libs/platform/layout/builder/src/lib/builder/widget-catalog.ts';
        if (tree.exists(catalogFile)) {
            const content = tree.read(catalogFile, 'utf-8');
            // پیدا کردن محل شروع آبجکت AXPWidgetsCatalog
            const catalogStart = content.indexOf('const AXPWidgetsCatalog: AXPWidgetTypesMap = {');
            if (catalogStart !== -1) {
                // اضافه کردن ویجت جدید در ابتدای آبجکت
                const newWidgetLine = `  ${propertyName}: '${fileName}-editor',\n`;
                const insertPosition = catalogStart + 'const AXPWidgetsCatalog: AXPWidgetTypesMap = {'.length;
                const updatedContent = content.substring(0, insertPosition) + '\n' + newWidgetLine + content.substring(insertPosition);
                tree.write(catalogFile, updatedContent);
            }
        }
        // بروزرسانی فایل widget-map.ts برای اضافه کردن ویجت جدید
        const mapFile = 'libs/platform/layout/builder/src/lib/builder/widget-map.ts';
        if (tree.exists(mapFile)) {
            const content = tree.read(mapFile, 'utf-8');
            // پیدا کردن محل پایان interface
            const interfaceEnd = content.lastIndexOf('}');
            if (interfaceEnd !== -1) {
                // اضافه کردن ویجت جدید به interface
                const newWidgetLine = `  ${propertyName}: '${fileName}-editor';\n`;
                // اضافه کردن به آخر interface، قبل از '}'
                const updatedContent = content.substring(0, interfaceEnd) +
                    (interfaceEnd > 0 && content[interfaceEnd - 1] !== '\n' ? '\n' : '') +
                    newWidgetLine +
                    content.substring(interfaceEnd);
                tree.write(mapFile, updatedContent);
            }
        }
        yield (0, devkit_1.formatFiles)(tree);
    });
}
//# sourceMappingURL=generator.js.map