// =============================== // FUNCIONES DE CONSULTA API // =============================== // Obtener calendario completo de la temporada actual async function obtenerCalendario() { try { const response = await fetch("https://api.jolpi.ca/ergast/f1/current.json"); const data = await response.json(); const carreras = data.MRData.RaceTable.Races; return carreras; } catch (error) { console.error("Error al obtener calendario:", error); return []; } } // Encontrar la siguiente carrera function encontrarSiguienteCarrera(carreras) { const ahora = new Date(); for (let carrera of carreras) { const fecha = new Date(`${carrera.date}T${carrera.time || '00:00:00Z'}`); if (fecha > ahora) { return { ...carrera, fecha }; } } return null; } // =============================== // CUENTA ATRÁS DINÁMICA // =============================== function iniciarCuentaAtras(fechaCarrera) { const countdown = document.getElementById("countdown"); function actualizar() { const ahora = new Date(); const diff = fechaCarrera - ahora; if (diff <= 0) { countdown.textContent = "🏁 ¡La carrera empezó!"; return; } const dias = Math.floor(diff / (1000 * 60 * 60 * 24)); const horas = Math.floor((diff / (1000 * 60 * 60)) % 24); const minutos = Math.floor((diff / (1000 * 60)) % 60); const segundos = Math.floor((diff / 1000) % 60); countdown.textContent = `${dias}d ${horas}h ${minutos}m ${segundos}s`; } actualizar(); setInterval(actualizar, 1000); } // =============================== // PILOTOS // =============================== async function cargarPilotos() { try { const response = await fetch('/f1/api/pilotos'); const pilotos = await response.json(); const tbody = document.querySelector('#pilotos-table tbody'); tbody.innerHTML = ''; // Limpiamos antes de rellenar pilotos.forEach(p => { const fila = document.createElement('tr'); fila.innerHTML = `