document.addEventListener('DOMContentLoaded', function () { const mappingForm = document.getElementById('mappingForm'); const convertForm = document.getElementById('convertForm'); const inputSample = document.getElementById('inputSample'); const outputSample = document.getElementById('outputSample'); const buildMappingBtn = document.getElementById('buildMappingBtn'); const fullInputFile = document.getElementById('fullInputFile'); const convertBtn = document.getElementById('convertBtn'); const existingMappings = document.getElementById('existingMappings'); const convertResult = document.getElementById('convertResult'); const mappingFileInput = document.getElementById('mappingFile'); function checkMappingFiles() { buildMappingBtn.disabled = !(inputSample.files.length > 0 && outputSample.files.length > 0); } function checkConvertState() { const mappingSelected = mappingFileInput.value !== ''; const fileSelected = fullInputFile.files.length > 0; convertBtn.disabled = !(mappingSelected && fileSelected); } function loadMappings() { fetch('api.php?action=list_mappings') .then(response => response.json()) .then(data => { if (data.success && data.mappings.length > 0) { existingMappings.innerHTML = ''; data.mappings.forEach(mapping => { const option = document.createElement('option'); option.value = `mappings/${mapping}`; option.textContent = mapping; existingMappings.appendChild(option); }); } else { existingMappings.innerHTML = ''; } }) .catch(error => { console.error('Error loading mappings:', error); existingMappings.innerHTML = ''; }); } inputSample.addEventListener('change', checkMappingFiles); outputSample.addEventListener('change', checkMappingFiles); fullInputFile.addEventListener('change', checkConvertState); existingMappings.addEventListener('change', function() { mappingFileInput.value = this.value; checkConvertState(); }); mappingForm.addEventListener('submit', function (e) { e.preventDefault(); buildMappingBtn.disabled = true; buildMappingBtn.innerHTML = ' Building...'; const formData = new FormData(this); formData.append('action', 'build_mapping'); fetch('api.php', { method: 'POST', body: formData }) .then(response => response.json()) .then(data => { if (data.success) { alert('Mapping built successfully!'); mappingFileInput.value = data.mapping_file; loadMappings(); // Refresh the list // Select the new mapping in the dropdown setTimeout(() => { existingMappings.value = data.mapping_file; checkConvertState(); }, 500); // Give it a moment to reload } else { let errorMsg = 'Error building mapping: ' + data.error; if(data.details) { errorMsg += '\nDetails: ' + JSON.stringify(data.details); } alert(errorMsg); } }) .catch(error => { console.error('Error:', error); alert('An error occurred while building the mapping.'); }) .finally(() => { buildMappingBtn.disabled = false; buildMappingBtn.innerHTML = 'Build Mapping'; }); }); convertForm.addEventListener('submit', function (e) { e.preventDefault(); convertBtn.disabled = true; convertBtn.innerHTML = ' Converting...'; convertResult.innerHTML = ''; const formData = new FormData(this); formData.append('action', 'convert'); fetch('api.php', { method: 'POST', body: formData }) .then(response => response.json()) .then(data => { if (data.success) { convertResult.innerHTML = `