const partidosContainer = document.getElementById('partidos-container'); const descargarMvpsBtn = document.getElementById('descargar-mvps'); const mensajeDescarga = document.getElementById('mensaje-descarga'); const mensajeError = document.getElementById('mensaje-error'); const mvpTable = document.getElementById('mvpTable').getElementsByTagName('tbody')[0]; const filtroRonda = document.createElement('select'); filtroRonda.className = 'form-select mb-3'; const defaultOption = document.createElement('option'); defaultOption.value = ''; defaultOption.textContent = 'Seleccionar Ronda'; filtroRonda.appendChild(defaultOption); const paginacionContainer = document.createElement('div'); // Contenedor para los botones de paginación paginacionContainer.className = 'mt-3 d-flex justify-content-center'; let partidosData = []; let equiposPorTag = {}; const mvpsSeleccionados = {}; let paginaActual = 1; const partidosPorPagina = 2; let totalPaginas = 0; async function cargarEquipos() { // ... (tu código para cargar equipos) const equiposPromises = [ 'assets/equipos/ad.json', 'assets/equipos/amt.json', 'assets/equipos/aogiri.json', 'assets/equipos/cl.json', 'assets/equipos/dbo.json', 'assets/equipos/dty.json', 'assets/equipos/enigma.json', 'assets/equipos/gx.json', 'assets/equipos/neo.json', 'assets/equipos/ns.json', 'assets/equipos/obs.json', 'assets/equipos/ovg.json', 'assets/equipos/pe.json', 'assets/equipos/plaga.json', 'assets/equipos/rk.json', 'assets/equipos/rntx.json', 'assets/equipos/sm.json', 'assets/equipos/space.json', 'assets/equipos/stmn.json', 'assets/equipos/tad.json', 'assets/equipos/tm.json', 'assets/equipos/tut.json', 'assets/equipos/tutw.json', 'assets/equipos/zafiro.json' ].map(async (file) => { const response = await fetch(file); if (!response.ok) { throw new Error(`Error al cargar ${file}: ${response.status}`); } return await response.json(); }); const equiposData = await Promise.all(equiposPromises); equiposData.forEach(equipo => { if (equipo && equipo.length > 0) { equiposPorTag[equipo[0].tag] = equipo[0]; } }); } async function cargarPartidos() { const partidosPromises = ['assets/partidos/pnorte.json', 'assets/partidos/psur.json', 'assets/partidos/cruces.json'].map(async (file) => { const response = await fetch(file); if (!response.ok) { throw new Error(`Error al cargar ${file}: ${response.status}`); } return await response.json(); }); const partidosArrays = await Promise.all(partidosPromises); let partidos = []; partidosArrays.forEach(partidoArray => { if (partidoArray && partidoArray.length > 0 && partidoArray[0].rondas) { partidos = partidos.concat(partidoArray); } }); partidosData = partidos.map(archivo => { return archivo.rondas.map(ronda => ({ ronda: ronda.ronda, partidos: ronda.partidos.map(partido => ({ equipoLocal: equiposPorTag[partido.tag1] ? equiposPorTag[partido.tag1].team : partido.tag1, tagLocal: partido.tag1, jugadoresLocal: equiposPorTag[partido.tag1] ? equiposPorTag[partido.tag1].jugadores.map(jugador => ({ nombre: jugador.nickname, id: jugador.ID, avatar: jugador.avatar, mvp: 0 })) : [], equipoVisitante: equiposPorTag[partido.tag2] ? equiposPorTag[partido.tag2].team : partido.tag2, tagVisitante: partido.tag2, jugadoresVisitante: equiposPorTag[partido.tag2] ? equiposPorTag[partido.tag2].jugadores.map(jugador => ({ nombre: jugador.nickname, id: jugador.ID, avatar: jugador.avatar, mvp: 0 })) : [], resultado: partido.resultado, stream: partido.stream, hora: partido.hora, dia: partido.dia, ronda: ronda.ronda, idUnico: `${partido.tagLocal}-${partido.tagVisitante}-${ronda.ronda.replace(/\s+/g, '')}` })) })).flat(); }).flat(); const rondasUnicas = [...new Set(partidosData.map(item => item.ronda))]; rondasUnicas.forEach(ronda => { const option = document.createElement('option'); option.value = ronda; option.textContent = ronda; filtroRonda.appendChild(option); }); partidosContainer.parentNode.insertBefore(filtroRonda, partidosContainer); partidosContainer.parentNode.insertBefore(paginacionContainer, partidosContainer.nextSibling); if (rondasUnicas.length > 0) { const primeraRonda = rondasUnicas[0]; filtroRonda.value = primeraRonda; mostrarPartidosPorRonda(primeraRonda); } else { mostrarPartidosPorRonda(''); } } function mostrarPartidosPorRonda(rondaSeleccionada) { const partidosFiltradosPorRonda = rondaSeleccionada ? partidosData.filter(rondaData => rondaData.ronda === rondaSeleccionada).flatMap(rondaData => rondaData.partidos) : partidosData.flatMap(rondaData => rondaData.partidos); paginaActual = 1; totalPaginas = Math.ceil(partidosFiltradosPorRonda.length / partidosPorPagina); mostrarPagina(partidosFiltradosPorRonda, paginaActual); generarBotonesPaginacion(totalPaginas); } function mostrarPagina(partidos, pagina) { partidosContainer.innerHTML = ''; const indiceInicio = (pagina - 1) * partidosPorPagina; const indiceFin = indiceInicio + partidosPorPagina; const partidosDeLaPagina = partidos.slice(indiceInicio, indiceFin); if (partidosDeLaPagina.length === 0) { partidosContainer.innerHTML = '
No hay partidos en esta página.
'; return; } const partidosRow = document.createElement('div'); partidosRow.className = 'row'; partidosDeLaPagina.forEach(partido => { const partidoCol = document.createElement('div'); partidoCol.className = 'col-md-6 mb-3'; const partidoDiv = document.createElement('div'); partidoDiv.className = 'partido-container p-3 bg-light rounded h-100 d-flex flex-column'; partidoDiv.dataset.partidoId = partido.idUnico; const equiposDiv = document.createElement('div'); equiposDiv.className = 'd-flex justify-content-center align-items-center mb-2'; const resultadoTexto = partido.resultado ? ` ${partido.resultado} ` : ' vs '; equiposDiv.innerHTML = `No hay partidos en esta página.
'; return; } const partidosRow = document.createElement('div'); partidosRow.className = 'row'; partidosDeLaPagina.forEach(partido => { const partidoCol = document.createElement('div'); partidoCol.className = 'col-md-6 mb-3'; const partidoDiv = document.createElement('div'); partidoDiv.className = 'partido-container p-3 bg-light rounded h-100 d-flex flex-column'; partidoDiv.dataset.partidoId = partido.idUnico; const equiposDiv = document.createElement('div'); equiposDiv.className = 'd-flex justify-content-center align-items-center mb-2'; const resultadoTexto = partido.resultado ? ` ${partido.resultado} ` : ' vs '; equiposDiv.innerHTML = `${mvp.nombre} (${mvp.equipo})
`).join(''); } else { celdaMvpsLocal.textContent = 'No hay MVPs seleccionados'; } if (encuentro.mvpsVisitante.length > 0) { celdaMvpsVisitante.innerHTML = encuentro.mvpsVisitante.map(mvp => `${mvp.nombre} (${mvp.equipo})
`).join(''); } else { celdaMvpsVisitante.textContent = 'No hay MVPs seleccionados'; } // Crear botón de Editar const editarBtn = document.createElement('button'); editarBtn.textContent = 'Editar'; editarBtn.className = 'btn btn-sm btn-warning me-1'; editarBtn.addEventListener('click', () => cargarMvpsParaEdicion(partidoId)); celdaAcciones.appendChild(editarBtn); // Crear botón de Eliminar const eliminarBtn = document.createElement('button'); eliminarBtn.textContent = 'Eliminar'; eliminarBtn.className = 'btn btn-sm btn-danger'; eliminarBtn.addEventListener('click', () => eliminarRegistroMvp(partidoId, fila)); celdaAcciones.appendChild(eliminarBtn); } } } function cargarMvpsParaEdicion(partidoId) { const encuentroMvp = mvpsSeleccionados[partidoId]; if (!encuentroMvp) { return; } // Deseleccionar la ronda actual para que se muestren todos los partidos filtroRonda.value = ''; mostrarPartidosPorRonda(''); // Mostrar todos los partidos // Esperar un breve momento para que se recarguen todos los partidos setTimeout(() => { const partidoDiv = document.querySelector(`.partido-container[data-partido-id="${partidoId}"]`); if (partidoDiv) { // Limpiar los inputs de MVP locales const inputsLocal = partidoDiv.querySelectorAll(`.jugadores-local input[data-equipo="${encuentroMvp.equipoLocal}"]`); inputsLocal.forEach(input => input.value = 0); // Llenar los inputs de MVP locales con los valores guardados encuentroMvp.mvpsLocal.forEach(mvp => { const input = Array.from(inputsLocal).find(input => input.dataset.jugadorId === mvp.id); if (input) { input.value = parseInt(input.value || 0) + 1; } }); // Limpiar los inputs de MVP visitantes const inputsVisitante = partidoDiv.querySelectorAll(`.jugadores-visitante input[data-equipo="${encuentroMvp.equipoVisitante}"]`); inputsVisitante.forEach(input => input.value = 0); // Llenar los inputs de MVP visitantes con los valores guardados encuentroMvp.mvpsVisitante.forEach(mvp => { const input = Array.from(inputsVisitante).find(input => input.dataset.jugadorId === mvp.id); if (input) { input.value = parseInt(input.value || 0) + 1; } }); // Hacer scroll hasta la tarjeta del partido (opcional) partidoDiv.scrollIntoView({ behavior: 'smooth', block: 'center' }); } }, 500); // Esperar medio segundo para que se recarguen los partidos } function eliminarRegistroMvp(partidoId, fila) { if (confirm(`¿Seguro que quieres eliminar los MVPs guardados para el partido ${mvpsSeleccionados[partidoId].equipoLocal} vs ${mvpsSeleccionados[partidoId].equipoVisitante}?`)) { delete mvpsSeleccionados[partidoId]; fila.remove(); // Eliminar la fila de la tabla } } // Evento al cambiar la ronda seleccionada (limpiar la tabla al cambiar de ronda) filtroRonda.addEventListener('change', (event) => { mostrarPartidosPorRonda(event.target.value); mvpTable.innerHTML = ''; Object.keys(mvpsSeleccionados).forEach(key => delete mvpsSeleccionados[key]); // Limpiar selecciones }); // Evento al hacer clic en el botón de descargar descargarMvpsBtn.addEventListener('click', () => { const mvpsData = generarJsonMvps(); if (Object.keys(mvpsData.encuentros).length === 0) { mensajeError.textContent = "No se ha seleccionado ningún MVP para descargar."; mensajeError.style.display = "block"; setTimeout(() => { mensajeError.style.display = 'none'; }, 3000); return; } descargarJson(mvpsData, 'mvps.json'); // El nombre del archivo puede ser 'ronda1.json' si lo deseas }); // Cargar los datos al cargar la página async function inicializar() { await cargarEquipos(); await cargarPartidos(); } inicializar();