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}
`;
}