const fs = require('fs');

// 1. Modify index.html
let html = fs.readFileSync('index.html', 'utf8');

const targetSalesStatus = `<select id="sales-returns-status">
            <option value="draft">مسودة (لا تؤثر على الأرصدة)</option>
            <option value="posted">مُرحلة (تؤثر على الأرصدة والحسابات)</option>
          </select>`;
const replacementSalesStatus = `<select id="sales-returns-status">
            <option value="draft">مسودة (لا تؤثر على الأرصدة)</option>
            <option value="pending_store">بانتظار اعتماد المخزن (موصى به)</option>
            <option value="posted">مُرحلة (تؤثر فوراً على الأرصدة والحسابات)</option>
          </select>`;

html = html.replace(targetSalesStatus, replacementSalesStatus);

const targetPurchasesStatus = `<select id="purchases-returns-status">
            <option value="draft">مسودة (لا تؤثر على الأرصدة)</option>
            <option value="posted">مُرحلة (تؤثر على الأرصدة والحسابات)</option>
          </select>`;
const replacementPurchasesStatus = `<select id="purchases-returns-status">
            <option value="draft">مسودة (لا تؤثر على الأرصدة)</option>
            <option value="pending_store">بانتظار اعتماد المخزن (موصى به)</option>
            <option value="posted">مُرحلة (تؤثر فوراً على الأرصدة والحسابات)</option>
          </select>`;

html = html.replace(targetPurchasesStatus, replacementPurchasesStatus);

fs.writeFileSync('index.html', html);
console.log('Updated index.html statuses.');

// 2. Modify vouchers_returns.js
let js = fs.readFileSync('vouchers_returns.js', 'utf8');

// For sales returns
const targetSalesSave = `      if (id) {
        r.id = parseInt(id);
        await window.DB.update('transactions', r);
        
        if (status === 'posted') {
            await generateSalesReturnJournal(r);
        } else {`;
const replacementSalesSave = `      if (id) {
        r.id = parseInt(id);
        await window.DB.update('transactions', r);
        
        if (status === 'pending_store' && typeof window.sendInvoiceToStore === 'function') {
            await window.sendInvoiceToStore(r.id);
        } else if (status === 'posted') {
            await generateSalesReturnJournal(r);
        } else {`;
js = js.replace(targetSalesSave, replacementSalesSave);

const targetSalesSaveNew = `      } else {
        r.id = Date.now();
        await window.DB.add('transactions', r);
        if (status === 'posted') {
            await generateSalesReturnJournal(r);
        }
      }`;
const replacementSalesSaveNew = `      } else {
        r.id = Date.now();
        await window.DB.add('transactions', r);
        if (status === 'pending_store' && typeof window.sendInvoiceToStore === 'function') {
            await window.sendInvoiceToStore(r.id);
        } else if (status === 'posted') {
            await generateSalesReturnJournal(r);
        }
      }`;
js = js.replace(targetSalesSaveNew, replacementSalesSaveNew);

// For purchases returns
const targetPurchasesSave = `      if (id) {
        r.id = parseInt(id);
        await window.DB.update('transactions', r);
        
        if (status === 'posted') {
            await generatePurchasesReturnJournal(r);
        } else {`;
const replacementPurchasesSave = `      if (id) {
        r.id = parseInt(id);
        await window.DB.update('transactions', r);
        
        if (status === 'pending_store' && typeof window.sendInvoiceToStore === 'function') {
            await window.sendInvoiceToStore(r.id);
        } else if (status === 'posted') {
            await generatePurchasesReturnJournal(r);
        } else {`;
js = js.replace(targetPurchasesSave, replacementPurchasesSave);

const targetPurchasesSaveNew = `      } else {
        r.id = Date.now();
        await window.DB.add('transactions', r);
        if (status === 'posted') {
            await generatePurchasesReturnJournal(r);
        }
      }`;
const replacementPurchasesSaveNew = `      } else {
        r.id = Date.now();
        await window.DB.add('transactions', r);
        if (status === 'pending_store' && typeof window.sendInvoiceToStore === 'function') {
            await window.sendInvoiceToStore(r.id);
        } else if (status === 'posted') {
            await generatePurchasesReturnJournal(r);
        }
      }`;
js = js.replace(targetPurchasesSaveNew, replacementPurchasesSaveNew);

fs.writeFileSync('vouchers_returns.js', js);
console.log('Updated vouchers_returns.js saves.');

// 3. Modify store_module.js (Approval Logic)
let storeJs = fs.readFileSync('store_module.js', 'utf8');

// Update storekeeper review title logic
const targetTitle = `document.getElementById('storekeeper-review-title').innerText = inv.type === 'purchases' ? 'مراجعة واستلام مشتريات' : 'مراجعة وصرف مبيعات';`;
const replaceTitle = `document.getElementById('storekeeper-review-title').innerText = inv.type === 'purchases' ? 'مراجعة واستلام مشتريات' : (inv.type === 'sales' ? 'مراجعة وصرف مبيعات' : (inv.type === 'sales_return' ? 'مراجعة واستلام مرتجع مبيعات' : 'مراجعة وصرف مرتجع مشتريات'));`;
storeJs = storeJs.replace(targetTitle, replaceTitle);

// Update btn-approve-storekeeper logic
const targetApprove = `  if (inv.type === 'sales') await generateSalesJournal(inv);
  else if (inv.type === 'purchases') await generatePurchasesJournal(inv);`;
const replaceApprove = `  if (inv.type === 'sales') await generateSalesJournal(inv);
  else if (inv.type === 'purchases') await generatePurchasesJournal(inv);
  else if (inv.type === 'sales_return') { if(typeof generateSalesReturnJournal === 'function') await generateSalesReturnJournal(inv); }
  else if (inv.type === 'purchases_return') { if(typeof generatePurchasesReturnJournal === 'function') await generatePurchasesReturnJournal(inv); }`;
storeJs = storeJs.replace(targetApprove, replaceApprove);

// Update sendInvoiceToStore notification messages
const targetNotifMsg = `message: inv.type === 'purchases' ? 'إذن استلام مشتريات وارد لك للتأكيد' : 'إذن صرف مبيعات وارد لك للتأكيد',`;
const replaceNotifMsg = `message: inv.type === 'purchases' ? 'إذن استلام مشتريات وارد لك للتأكيد' : (inv.type === 'sales' ? 'إذن صرف مبيعات وارد لك للتأكيد' : (inv.type === 'sales_return' ? 'مرتجع مبيعات (استلام) وارد لك للتأكيد' : 'مرتجع مشتريات (صرف) وارد لك للتأكيد')),`;
storeJs = storeJs.replace(targetNotifMsg, replaceNotifMsg);

fs.writeFileSync('store_module.js', storeJs);
console.log('Updated store_module.js approval logic.');
