const selector = document.getElementById("selector"); const quiz = document.getElementById("quiz"); const resultado = document.getElementById("resultado"); const feedback = document.getElementById("feedback"); const preguntaActualContenedor = document.getElementById("pregunta-actual"); let preguntasCargadas = []; let estado = { indiceActual: 0, aciertos: 0, fallos: 0 }; // --- CARGAR EXAMEN --- selector.addEventListener("change", async () => { const url = selector.value; if (!url) return; const datos = await fetch(url).then(r => r.json()); // Ajustamos por si el JSON viene con una propiedad .preguntas o es un array directo preguntasCargadas = datos.preguntas || datos; reiniciarEstadisticas(); mostrarSiguientePregunta(); }); function reiniciarEstadisticas() { estado.indiceActual = 0; estado.aciertos = 0; estado.fallos = 0; quiz.innerHTML = ""; // Limpiamos el modo "lista completa" resultado.textContent = ""; } // --- MOSTRAR UNA POR UNA --- function mostrarSiguientePregunta() { feedback.textContent = ""; if (estado.indiceActual >= preguntasCargadas.length) { finalizarExamen(); return; } const p = preguntasCargadas[estado.indiceActual]; actualizarMarcador(); // Lógica para mostrar el supuesto si existe let htmlContexto = ""; if (p.contexto) { htmlContexto = `

📋 ${p.contexto.supuesto}

${p.contexto.descripcion}

`; } preguntaActualContenedor.innerHTML = `
${htmlContexto}

Pregunta ${estado.indiceActual + 1} de ${preguntasCargadas.length}

${p.pregunta}

${Object.entries(p.opciones).map(([letra, texto]) => ` `).join("")}
`; document.getElementById("comprobar").onclick = () => validarRespuesta(p); document.getElementById("saltar").onclick = () => saltarPregunta(); } function saltarPregunta() { estado.indiceActual++; mostrarSiguientePregunta(); } function validarRespuesta(p) { const marcada = document.querySelector(`input[name="respuesta"]:checked`); if (!marcada) { feedback.textContent = "⚠️ Por favor, selecciona una opción."; feedback.style.color = "orange"; return; } if (marcada.value === p.correcta) { estado.aciertos++; alert("✔ ¡Correcto!"); // Opcional, puedes usar el div feedback } else { estado.fallos++; alert(`✘ Incorrecto. La respuesta era la ${p.correcta.toUpperCase()}`); } estado.indiceActual++; mostrarSiguientePregunta(); } function actualizarMarcador() { // Fórmula oficial TAI: (Aciertos - (Fallos / 3)) / TotalPreguntas * 10 const puntosNetos = estado.aciertos - (estado.fallos / 3); let notaSobreDiez = (puntosNetos / preguntasCargadas.length) * 10; if (notaSobreDiez < 0) notaSobreDiez = 0; resultado.innerHTML = `
Aciertos: ${estado.aciertos}
Fallos: ${estado.fallos}
En blanco: ${estado.indiceActual - (estado.aciertos + estado.fallos)}
Nota proyectada: ${notaSobreDiez.toFixed(2)}
`; } function finalizarExamen() { preguntaActualContenedor.innerHTML = "

¡Examen finalizado!

"; const notaFinal = ((estado.aciertos - (estado.fallos / 3)) / preguntasCargadas.length * 10).toFixed(2); resultado.innerHTML = `

Resumen Final:

Aciertos: ${estado.aciertos}

Fallos: ${estado.fallos}

Nota sobre 10: ${notaFinal}

`; }