/* ========================================================= FOOTBALL STATS API - LOGIQUE PRINCIPALE (FRONT/BACK MIX) --------------------------------------------------------- Ici on gère toute la logique de l'application : - joueurs - équipes - tournois - statistiques - stockage local (localStorage) ========================================================= */ /* ========================= STOCKAGE LOCAL (MEMOIRE) ------------------------- On récupère les données si elles existent déjà dans le navigateur. Sinon on initialise des tableaux vides. ========================= */ let players = JSON.parse(localStorage.getItem("players")) || []; let teams = JSON.parse(localStorage.getItem("teams")) || []; let tournaments = JSON.parse(localStorage.getItem("tournaments")) || []; /* ========================= SAUVEGARDE AUTOMATIQUE ------------------------- Permet de sauvegarder toutes les données à chaque modification. Ici on utilise localStorage pour simuler une base de données locale. ========================= */ function save(){ localStorage.setItem("players", JSON.stringify(players)); localStorage.setItem("teams", JSON.stringify(teams)); localStorage.setItem("tournaments", JSON.stringify(tournaments)); } /* ========================= NAVIGATION ENTRE ONGLETS ------------------------- Fonction simple pour afficher un onglet et cacher les autres. ========================= */ function showTab(id){ document.querySelectorAll(".tab").forEach(t => t.style.display = "none"); document.getElementById(id).style.display = "block"; } /* ========================= MODULE JOUEURS ------------------------- Gestion complète des joueurs : - ajout - affichage - suppression ========================= */ function addPlayer(){ const name = document.getElementById("playerName").value; // Création d’un objet joueur avec stats par défaut players.push({ id: Date.now(), // ID unique basé sur le timestamp name, goals: 0, assists: 0, fouls: 0 }); save(); renderPlayers(); renderStats(); } /* Affichage des joueurs dans l'interface */ function renderPlayers(){ const div = document.getElementById("playersList"); div.innerHTML = ""; players.forEach(p => { div.innerHTML += `
${p.name}
⚽ ${p.goals} | 🎯 ${p.assists} | ❌ ${p.fouls}
`; }); } /* Suppression d’un joueur + nettoyage dans les équipes */ function deletePlayer(id){ // suppression du joueur players = players.filter(p => p.id != id); // suppression du joueur dans toutes les équipes teams.forEach(t => { t.players = t.players.filter(pid => pid != id); }); save(); renderPlayers(); renderTeams(); renderStats(); } /* ========================= MODULE EQUIPES ------------------------- Création et gestion des équipes + assignation des joueurs ========================= */ function addTeam(){ const name = document.getElementById("teamName").value; teams.push({ id: Date.now(), name, players: [] // liste des IDs joueurs }); save(); renderTeams(); } /* Ajouter un joueur dans une équipe */ function addPlayerToTeam(playerId, teamId){ const team = teams.find(t => t.id == teamId); if(!team.players.includes(playerId)){ team.players.push(playerId); } save(); renderTeams(); } /* Retirer un joueur d’une équipe */ function removePlayerFromTeam(playerId, teamId){ const team = teams.find(t => t.id == teamId); team.players = team.players.filter(p => p != playerId); save(); renderTeams(); } /* Affichage des équipes */ function renderTeams(){ const div = document.getElementById("teamsList"); div.innerHTML = ""; teams.forEach(t => { div.innerHTML += `
${t.name}
${t.players.map(pid => { const player = players.find(p => p.id == pid); if(!player) return ""; return `
${player.name}
`; }).join("")}
`; }); } /* Suppression équipe */ function deleteTeam(id){ teams = teams.filter(t => t.id != id); save(); renderTeams(); } /* ========================= MODULE TOURNOIS ========================= */ function addTournament(){ const name = document.getElementById("tournamentName").value; tournaments.push({ id: Date.now(), name, teams: [], matches: [] }); save(); renderTournaments(); } /* Ajout d’équipe dans un tournoi */ function addTeamToTournament(teamId, tournamentId){ const t = tournaments.find(x => x.id == tournamentId); if(!t.teams.includes(teamId)){ t.teams.push(teamId); } save(); renderTournaments(); } /* Ajout d’un match dans un tournoi */ function addMatch(tournamentId, team1, team2, s1, s2){ const t = tournaments.find(x => x.id == tournamentId); t.matches.push({ team1, team2, score1: s1, score2: s2 }); save(); renderTournaments(); } /* Affichage tournois */ function renderTournaments(){ const div = document.getElementById("tournamentsList"); div.innerHTML = ""; tournaments.forEach(t => { div.innerHTML += `
${t.name}

Teams:
${ t.teams.length > 0 ? t.teams.map(id => teams.find(x => x.id == id)?.name).join(" vs ") : "Aucune équipe" }



${ t.matches.length > 0 ? t.matches.map(m => ` ${teams.find(x => x.id == m.team1)?.name || "?"} ${m.score1} - ${m.score2} ${teams.find(x => x.id == m.team2)?.name || "?"} `).join("
") : "Aucun match" }
`; }); } // Supprimer un tournoi function deleteTournament(id){ tournaments = tournaments.filter(t => t.id != id); save(); // sauvegarde en localStorage renderTournaments(); // refresh affichage } /* Formulaire dynamique de match */ function renderMatchForm(id){ const div = document.getElementById("match-" + id); div.innerHTML = ` `; } /* ========================= MODULE STATS JOUEURS ========================= */ function renderStats(){ const div = document.getElementById("statsList"); div.innerHTML = ""; players.forEach(p => { div.innerHTML += `
${p.name}
Goals: Assists: Fouls:
`; }); } /* Sauvegarde des stats */ function saveStats(id){ const p = players.find(x => x.id == id); p.goals = Number(document.getElementById("g" + id).value); p.assists = Number(document.getElementById("a" + id).value); p.fouls = Number(document.getElementById("f" + id).value); save(); renderPlayers(); } /* ========================= INITIALISATION APP ========================= */ window.onload = () => { showTab("players"); renderPlayers(); renderTeams(); renderTournaments(); renderStats(); };