const fs = require('fs');

if (fs.existsSync('app_final.js')) {
    let js = fs.readFileSync('app_final.js', 'utf8');
    
    // The exact block to replace
    const searchString = `          records.push({
            date: j.date,
            type: 'قيد يومية',
            ref: '#' + j.id,
            notes: r.description || j.notes || '',
            debit: parseFloat(r.debit) || 0,
            credit: parseFloat(r.credit) || 0
          });`;

    const replaceString = `
          let tName = 'قيد يومية';
          let rName = '#' + j.id;
          
          if (j.reference) {
             if (j.reference.startsWith('voucher_')) { tName = 'سند (صرف/قبض)'; rName = '#' + j.reference.split('_')[1]; }
             else if (j.reference.startsWith('transfer_')) { tName = 'سند تحويل'; rName = '#' + j.reference.split('_')[1]; }
             else if (j.reference.startsWith('sales_')) { tName = 'فاتورة مبيعات'; rName = '#' + j.reference.split('_')[1]; }
             else if (j.reference.startsWith('purchases_')) { tName = 'فاتورة مشتريات'; rName = '#' + j.reference.split('_')[1]; }
             else if (j.reference.startsWith('returns_sales_')) { tName = 'مرتجع مبيعات'; rName = '#' + j.reference.split('_')[2]; }
             else if (j.reference.startsWith('returns_purchases_')) { tName = 'مرتجع مشتريات'; rName = '#' + j.reference.split('_')[2]; }
             else if (j.reference.startsWith('client_abstract_')) { tName = 'مستخلص عميل'; rName = '#' + j.reference.split('_')[2]; }
             else if (j.reference.startsWith('subcontract_abstract_')) { tName = 'مستخلص مقاول'; rName = '#' + j.reference.split('_')[2]; }
             else if (j.reference.startsWith('manual_')) { tName = 'قيد يدوي'; rName = '#' + j.reference.split('_')[1]; }
             else { rName = j.reference; }
          }
          
          // Fallback to description heuristics if reference is missing or generic
          if (tName === 'قيد يومية' && j.desc) {
              if (j.desc.includes('سند صرف')) tName = 'سند صرف';
              else if (j.desc.includes('سند قبض')) tName = 'سند قبض';
              else if (j.desc.includes('سند تحويل')) tName = 'سند تحويل';
          }

          records.push({
            date: j.date,
            type: tName,
            ref: rName,
            notes: r.description || j.notes || j.desc || '',
            debit: parseFloat(r.debit) || 0,
            credit: parseFloat(r.credit) || 0
          });`;

    if (js.includes("type: 'قيد يومية',") && js.includes("ref: '#' + j.id,")) {
        js = js.replace(searchString, replaceString);
        fs.writeFileSync('app_final.js', js, 'utf8');
        console.log('Patched Account Statement to show source type and ref.');
    } else {
        console.log('Search string not found.');
    }
}

// Cache buster
if (fs.existsSync('index.html')) {
    let html = fs.readFileSync('index.html', 'utf8');
    html = html.replace(/v=\d+/g, 'v=' + Date.now());
    fs.writeFileSync('index.html', html, 'utf8');
}
