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

// Логика для чекбоксов Seller/Organizer
frappe.ui.form.on('Sales Invoice', {
    refresh: function(frm) {
        // Убедимся что одна из галочек Seller/Organizer выбрана (если поля видимы)
        if (should_show_seller_organizer(frm)) {
            if (!frm.doc.seller && !frm.doc.organizer) {
                frm.set_value('organizer', 1);
            }
        }
    },

    // Обработчики для Seller/Organizer
    seller: function(frm) {
        if (should_show_seller_organizer(frm)) {
            if (frm.doc.seller) {
                frm.set_value('organizer', 0);
            } else if (!frm.doc.organizer) {
                // Если seller снят и organizer тоже не выбран, ставим organizer
                frm.set_value('organizer', 1);
            }
        }
    },

    organizer: function(frm) {
        if (should_show_seller_organizer(frm)) {
            if (frm.doc.organizer) {
                frm.set_value('seller', 0);
            } else if (!frm.doc.seller) {
                // Если organizer снят и seller тоже не выбран, ставим seller
                frm.set_value('seller', 1);
            }
        }
    },

    // Обработчик изменения company_main_activity
    company_main_activity: function(frm) {
        // Если поля Seller/Organizer должны быть видимы, устанавливаем значения по умолчанию
        if (should_show_seller_organizer(frm)) {
            if (!frm.doc.seller && !frm.doc.organizer) {
                frm.set_value('organizer', 1);
            }
        }
    }
});

// Функция проверки, должны ли быть видимы поля Seller/Organizer
function should_show_seller_organizer(frm) {
    const allowed_activities = ["92000", "9200003", "9200004", "9200001", "9200002", "9200005"];
    return frm.doc.company_main_activity &&
           allowed_activities.includes(frm.doc.company_main_activity);
}

// Функция синхронизации фактических сумм НДС из items в taxes
function sync_vat_amounts_to_taxes(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 Invoice Item
frappe.ui.form.on('Sales Invoice Item', {
    item_tax_template: function(frm, cdt, cdn) {
        // Даем время на пересчет vat_amount, затем синхронизируем
        setTimeout(function() {
            sync_vat_amounts_to_taxes(frm);
        }, 500);
    },

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

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

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

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