// js/proa.js - Lógica para el visor de Guías PROA (v12 - Con Diagnósticos) // ====================================================================== // BLOCK START: DOM Elements Selection & Initial Setup // ====================================================================== console.log("[proa.js v12] Script cargado. Esperando DOMContentLoaded..."); window.addEventListener('DOMContentLoaded', () => { console.log("[proa.js v12] DOMContentLoaded detectado. Iniciando setup..."); // Selectores y Contenedores const guideSelector = document.getElementById('guideSelector'); const diagnosisSelectorContainer = document.getElementById('diagnosis-selector-container'); const diagnosisSelector = document.getElementById('diagnosisSelector'); const guideContentDisplay = document.getElementById('guide-content-display'); const togglePediatricCheckbox = document.getElementById('togglePediatric'); const guidesDataUrl = 'guides_data.json'; // Asume que está en proa/ // Verificar elementos críticos if (!guideSelector || !diagnosisSelectorContainer || !diagnosisSelector || !guideContentDisplay || !togglePediatricCheckbox) { console.error("[proa.js v12] Error Crítico: No se encontraron elementos DOM esenciales."); guideContentDisplay.innerHTML = '
Error: Interfaz no inicializada correctamente.
'; return; } console.log("[proa.js v12] Elementos DOM encontrados."); // ====================================================================== // BLOCK END: DOM Elements Selection & Initial Setup // ====================================================================== // ====================================================================== // BLOCK START: State Variables // ====================================================================== let allGuides = []; // Almacenará todas las guías del JSON let currentSelectedGuideData = null; // Guarda los datos completos de la guía seleccionada let currentGuideHTMLContent = null; // Cache para el HTML de la guía actual con diagnósticos // ====================================================================== // BLOCK END: State Variables // ====================================================================== // ====================================================================== // BLOCK START: Function to Fetch Guides Data (from JSON) // ====================================================================== async function loadGuidesData() { console.log(`[proa.js v12] Iniciando loadGuidesData desde: ${guidesDataUrl}`); guideSelector.innerHTML = ''; guideSelector.disabled = true; resetUI(); // Limpia todo try { console.log("[proa.js v12] Realizando fetch..."); const response = await fetch(guidesDataUrl); console.log(`[proa.js v12] Fetch completado. Status: ${response.status}`); if (!response.ok) throw new Error(`Error HTTP ${response.status} al cargar ${guidesDataUrl}. Verifica que el archivo exista y sea accesible.`); console.log("[proa.js v12] Parseando JSON..."); const rawData = await response.json(); console.log("[proa.js v12] JSON parseado."); if (!Array.isArray(rawData)) throw new Error("El formato del JSON no es un array válido."); // Filtrar y validar guías allGuides = rawData.filter(g => g.id && g.title && g.file && typeof g.isPediatric === 'boolean'); console.log(`[proa.js v12] Guías válidas iniciales: ${allGuides.length}`); // Validar estructura de diagnóstico si existe allGuides = allGuides.map(g => { if (g.hasDiagnoses === true) { if (!Array.isArray(g.diagnoses) || g.diagnoses.some(d => !d.id || !d.title)) { console.warn(`[proa.js v12] Guía '${g.title}' marcada con 'hasDiagnoses' pero la estructura 'diagnoses' es inválida. Se tratará como guía normal.`); return { ...g, hasDiagnoses: false, diagnoses: undefined }; // Corregir datos inválidos } } return g; }); if (allGuides.length === 0) throw new Error("No se encontraron guías válidas en los datos después de la validación."); // Ordenar alfabéticamente para el desplegable principal allGuides.sort((a, b) => a.title.localeCompare(b.title)); console.log("[proa.js v12] Llamando a populateGuideSelector (mostrará Adultos por defecto)..."); populateGuideSelector(); // Poblar el desplegable principal guideSelector.disabled = false; // Habilitar selector principal console.log("[proa.js v12] Carga inicial de datos completada."); } catch (error) { console.error("[proa.js v12] Error durante loadGuidesData:", error); guideSelector.innerHTML = ``; guideSelector.disabled = true; guideContentDisplay.innerHTML = `Error crítico al cargar datos: ${error.message}. Revisa la consola y el archivo '${guidesDataUrl}'.
`; } } // ====================================================================== // BLOCK END: Function to Fetch Guides Data (from JSON) // ====================================================================== // ====================================================================== // BLOCK START: UI Update Functions // ====================================================================== // Resetea el área de contenido y el selector de diagnóstico function resetUI(fullReset = true) { guideContentDisplay.innerHTML = 'Selecciona una guía del desplegable.
Cargando guía completa...
Cargando diagnóstico...
Error: Datos de guía no encontrados.
'; return; } // Decidir si mostrar selector de diagnóstico o cargar contenido completo if (currentSelectedGuideData.hasDiagnoses === true) { console.log(`[proa.js v12] La guía '${currentSelectedGuideData.title}' tiene diagnósticos. Poblando selector secundario.`); populateDiagnosisSelector(currentSelectedGuideData); // Mostrar un mensaje inicial diferente en el área de contenido guideContentDisplay.innerHTML = 'Selecciona un diagnóstico específico del desplegable superior.
Selecciona un diagnóstico específico del desplegable superior.
Error: Guía base no seleccionada correctamente.
'; } }); // --- Listener para el checkbox Pediátrico/Adulto --- togglePediatricCheckbox.addEventListener('change', () => { console.log('[proa.js v12] Cambiado filtro pediátrico.'); // Repoblar el selector principal y resetear completamente la UI populateGuideSelector(); // resetUI() ya se llama dentro de populateGuideSelector, así que no hace falta llamarlo de nuevo explícitamente aquí. }); console.log("[proa.js v12] Listeners añadidos."); // ====================================================================== // BLOCK END: Event Listeners Setup // ====================================================================== // ====================================================================== // BLOCK START: Initial Execution // ====================================================================== loadGuidesData(); // Cargar JSON e iniciar UI // ====================================================================== // BLOCK END: Initial Execution // ====================================================================== }); // Fin DOMContentLoaded console.log("[proa.js v12] Script completamente definido.");