frappe.ui.form.on('XML Mapping Tool', {
    refresh: function(frm) {
        // Инициализация объектов
        frm.xmlParser = new taxes_az.xml_mapping.XMLParser();
        frm.fieldGenerator = new taxes_az.xml_mapping.FieldGenerator(frm);
        frm.doctypeFieldSelector = new taxes_az.xml_mapping.DoctypeFieldSelector(frm);
        
        // Добавление кнопки для парсинга XML
        frm.add_custom_button(__('Parse XML'), function() {
            const xmlContent = frm.doc.xml_sample_file;
            if (!xmlContent) {
                frappe.throw(__('Please enter XML content first'));
                return;
            }
            
            // Парсинг XML и создание полей
            const xmlStructure = frm.xmlParser.parseXML(xmlContent);
            if (xmlStructure) {
                // Сохраняем структуру в поле формы
                frm.set_value('xml_structure', JSON.stringify(xmlStructure));
                
                // Создаем UI для полей
                frm.fieldGenerator.createFieldsUI(xmlStructure);
                
                frappe.show_alert({
                    message: __('XML successfully parsed'),
                    indicator: 'green'
                });
            }
        }).addClass('btn-primary');
        
        // Если структура XML уже загружена и выбран целевой DocType,
        // только тогда обновляем UI и только если секция еще не создана
        if (frm.doc.xml_structure && frm.doc.target_doctype && !$('.xml-mapping-section').length) {
            try {
                const xmlStructure = JSON.parse(frm.doc.xml_structure);
                frm.fieldGenerator.createFieldsUI(xmlStructure);
            } catch (e) {
                console.error('Error parsing XML structure:', e);
            }
        }
        
        // Добавляем информационное сообщение о процессе использования
        if (!frm.doc.__islocal) {
            frm.set_intro(`
                <div class="alert alert-info">
                    <p><strong>${__('How to use this tool:')}</strong></p>
                    <ol>
                        <li>${__('Paste your XML sample into the XML Content field')}</li>
                        <li>${__('Click "Parse XML" button')}</li>
                        <li>${__('Select a Target DocType')}</li>
                        <li>${__('Map XML fields to DocType fields using the dropdown selectors')}</li>
                        <li>${__('Save your mapping settings by clicking the Save button')}</li>
                        <li>${__('Use the client-side script in your target DocType to add the export button')}</li>
                    </ol>
                </div>
            `);
        }
        
        // Добавляем кнопку сохранения для явного сохранения маппинга
        frm.add_custom_button(__('Save Mapping'), function() {
            frm.save();
        }).addClass('btn-primary');
    },
    
    target_doctype: function(frm) {
        // При изменении целевого DocType, нам нужно обновить только выпадающие списки,
        // но не пересоздавать всю секцию
        if (frm.doc.xml_structure && frm.doc.target_doctype) {
            try {
                const xmlStructure = JSON.parse(frm.doc.xml_structure);
                
                // Если секция уже существует, просто обновим выпадающие списки
                if ($('.xml-mapping-section').length) {
                    const fieldSelector = new taxes_az.xml_mapping.DoctypeFieldSelector(frm);
                    fieldSelector.attachFieldSelectors($('.xml-fields-container'), xmlStructure.fieldPaths);
                } else {
                    // Если секции еще нет, создаем полный UI
                    frm.fieldGenerator.createFieldsUI(xmlStructure);
                }
            } catch (e) {
                console.error('Error parsing XML structure:', e);
            }
        }
    }
});
