// Запускаем логику калькулятора НДС для Sales Order
jey_erp.vat_calculator.init('Sales Order');

// Функция синхронизации фактических сумм НДС из items в taxes
function sync_vat_amounts_to_taxes_so(frm) {
    if (!frm.doc.items || !frm.doc.taxes || frm.doc.items.length === 0) return;

    // Вызываем серверный метод для синхронизации
    frappe.call({
        method: 'jey_erp.custom.sales_invoice.sync_vat_to_taxes',
        args: {
            doc: frm.doc
        },
        callback: function(r) {
            if (r.message && r.message.length > 0) {
                // Обновляем taxes таблицу результатами с сервера
                r.message.forEach(function(updated_tax, idx) {
                    if (frm.doc.taxes[idx]) {
                        frm.doc.taxes[idx].tax_amount = updated_tax.tax_amount;
                        frm.doc.taxes[idx].base_tax_amount = updated_tax.base_tax_amount;
                    }
                });

                // Обновляем отображение
                frm.refresh_field('taxes');
            }
        }
    });
}

// Обработчики для Sales Order Item
frappe.ui.form.on('Sales Order Item', {
    item_tax_template: function(frm, cdt, cdn) {
        // Даем время на пересчет vat_amount, затем синхронизируем
        setTimeout(function() {
            sync_vat_amounts_to_taxes_so(frm);
        }, 500);
    },

    qty: function(frm, cdt, cdn) {
        setTimeout(function() {
            sync_vat_amounts_to_taxes_so(frm);
        }, 500);
    },

    rate: function(frm, cdt, cdn) {
        setTimeout(function() {
            sync_vat_amounts_to_taxes_so(frm);
        }, 500);
    },

    amount: function(frm, cdt, cdn) {
        setTimeout(function() {
            sync_vat_amounts_to_taxes_so(frm);
        }, 500);
    },

    vat_amount: function(frm, cdt, cdn) {
        // Когда vat_amount изменяется, сразу синхронизируем
        setTimeout(function() {
            sync_vat_amounts_to_taxes_so(frm);
        }, 300);
    }
});