const fs = require('fs');

try {
    let appFinalJs = fs.readFileSync('app_final.js', 'utf8');

    // Inject the resolver function
    if (!appFinalJs.includes('window.resolveSystemAccount')) {
        appFinalJs = `
window.resolveSystemAccount = async function(accountName, accountType, keywords) {
    let acc = currentAccounts.find(a => a.name.trim() === accountName.trim());
    if (acc) return acc;
    
    if (keywords && keywords.length > 0) {
        acc = currentAccounts.find(a => keywords.some(k => a.name.includes(k)));
        if (acc) return acc;
    }

    try {
        const newAcc = {
            code: Date.now().toString().slice(-6),
            name: accountName,
            type: accountType,
            parent_id: null,
            balance: 0
        };
        const addedId = await window.DB.add('accounts', newAcc);
        newAcc.id = addedId;
        currentAccounts.push(newAcc);
        if (window.loadData) window.loadData(false);
        return newAcc;
    } catch (e) {
        console.error("Failed to auto-create system account", e);
        return null;
    }
};\n` + appFinalJs;
    }

    // Patch generateSalesJournal
    appFinalJs = appFinalJs.replace(
        /const salesAcc = currentAccounts\.find\(a => a\.name === 'إيرادات المبيعات' \|\| a\.name === 'إيرادات مبيعات'\);/g,
        `const salesAcc = await window.resolveSystemAccount('إيرادات المبيعات', 'revenues', ['إيرادات', 'مبيعات', 'ايراد']);`
    );

    // Remove the unused invAcc/cogsAcc inside generateSalesJournal to prevent errors if they are missing
    appFinalJs = appFinalJs.replace(
        /const invAcc = currentAccounts\.find\(a => a\.name\.includes\('مخزون'\) \|\| a\.name === 'مخزون'\);\n\s*const cogsAcc = currentAccounts\.find\(a => a\.name === 'تكلفة البضاعة المباعة'\);/g,
        ``
    );

    // Patch generatePurchasesJournal
    appFinalJs = appFinalJs.replace(
        /const invAcc = currentAccounts\.find\(a => a\.name\.includes\('مخزون'\) \|\| a\.name === 'مخزون'\);/g,
        `const invAcc = await window.resolveSystemAccount('مخزون البضاعة', 'assets', ['مخزون', 'بضاعة', 'مخازن']);`
    );

    // Fix the alert message dynamically in generateSalesJournal
    appFinalJs = appFinalJs.replace(
        /alert\('تحذير: لا يمكن توليد قيد آلي لأنه لم يتم العثور على حساب "العملاء" أو "إيرادات المبيعات" في دليل الحسابات\.'\);/g,
        `alert('تحذير: لا يمكن توليد قيد آلي لأنه حدثت مشكلة في إنشاء حساب إيرادات المبيعات أو حساب العميل.');`
    );
    
    // Fix the alert message dynamically in generatePurchasesJournal
    appFinalJs = appFinalJs.replace(
        /alert\('تحذير: لا يمكن توليد قيد آلي لأنه لم يتم العثور على حساب "الموردين" أو "المخزون" في دليل الحسابات\.'\);/g,
        `alert('تحذير: لا يمكن توليد قيد آلي لأنه حدثت مشكلة في إنشاء حساب المخزون أو المورد.');`
    );

    fs.writeFileSync('app_final.js', appFinalJs, 'utf8');

    // Bust cache
    let indexHtml = fs.readFileSync('index.html', 'utf8');
    const timestamp = Date.now();
    indexHtml = indexHtml.replace(/app_final\.js\?v=\d+/g, 'app_final.js?v=' + timestamp);
    fs.writeFileSync('index.html', indexHtml, 'utf8');

    console.log('System Account resolver logic injected successfully.');
} catch (e) {
    console.error('Error patching:', e);
}
