document.addEventListener('DOMContentLoaded', function() { // --- Global State --- let myFavorites = []; // Holds the user's favorite players state let comparisonPlayer1 = null; let comparisonPlayer2 = null; // --- DOM Elements --- const authLinks = document.getElementById('auth-links'); const searchInput = document.getElementById('playerSearch'); const searchResultsSection = document.getElementById('search-results'); const searchResultsContainer = document.getElementById('search-results-container'); const favoritePlayersSection = document.getElementById('favorite-players'); const favoritePlayersContainer = favoritePlayersSection.querySelector('.row'); const popularPlayersSection = document.getElementById('popular-players'); const popularPlayersContainer = popularPlayersSection.querySelector('.row'); // Comparison elements const player1SearchInput = document.getElementById('player1-search'); const player2SearchInput = document.getElementById('player2-search'); const player1Results = document.getElementById('player1-results'); const player2Results = document.getElementById('player2-results'); const compareBtn = document.getElementById('compare-btn'); // --- Auth Logic --- const updateAuthUI = (user) => { if (user) { let adminLink = user.role === 'admin' ? 'Admin' : ''; authLinks.innerHTML = ` ${adminLink} `; document.getElementById('logout-btn').addEventListener('click', logout); favoritePlayersSection.style.display = 'block'; loadFavorites(); } else { authLinks.innerHTML = ` Login Register `; favoritePlayersSection.style.display = 'none'; } }; const logout = () => { fetch('/api/logout.php').then(() => { myFavorites = []; window.location.reload(); }); }; const checkSession = () => { fetch('/api/check_session.php') .then(response => response.json()) .then(data => { updateAuthUI(data.loggedIn ? data.user : null); }); }; // --- Comparison Logic --- const setupComparisonSearch = (input, resultsContainer, playerNumber) => { input.addEventListener('keyup', function() { const searchTerm = input.value.trim(); if (searchTerm.length < 3) { resultsContainer.innerHTML = ''; resultsContainer.style.display = 'none'; return; } fetch(`/api/search.php?name=${encodeURIComponent(searchTerm)}`) .then(response => response.json()) .then(data => { resultsContainer.innerHTML = ''; if (data.player) { resultsContainer.style.display = 'block'; data.player.slice(0, 5).forEach(player => { const item = document.createElement('div'); item.classList.add('result-item'); item.textContent = `${player.strPlayer} (${player.strTeam})`; item.addEventListener('click', () => { if (playerNumber === 1) { comparisonPlayer1 = player; input.value = player.strPlayer; } else { comparisonPlayer2 = player; input.value = player.strPlayer; } resultsContainer.innerHTML = ''; resultsContainer.style.display = 'none'; checkCompareReady(); }); resultsContainer.appendChild(item); }); } else { resultsContainer.style.display = 'none'; } }); }); }; const checkCompareReady = () => { if (comparisonPlayer1 && comparisonPlayer2) { compareBtn.disabled = false; } }; if (compareBtn) { compareBtn.addEventListener('click', () => { if (comparisonPlayer1 && comparisonPlayer2) { window.location.href = `/compare.php?p1=${comparisonPlayer1.idPlayer}&p2=${comparisonPlayer2.idPlayer}`; } }); } // --- Database-backed Favorites Logic (My Favorites) --- const loadFavorites = () => { fetch('/api/get_favorites.php') .then(response => response.json()) .then(data => { if (data.status === 'success') { myFavorites = data.favorites; renderFavorites(); } }); }; const renderFavorites = () => { favoritePlayersContainer.innerHTML = ''; if (myFavorites.length === 0) { favoritePlayersContainer.innerHTML = '
No favorite players added yet.
No popular players yet.
No players found.
'; } }); } else { document.getElementById('favorite-players').style.display = 'block'; document.getElementById('popular-players').style.display = 'block'; searchResultsSection.style.display = 'none'; searchResultsContainer.innerHTML = ''; } }); } // --- Initial Render --- checkSession(); loadPopularPlayers(); if (player1SearchInput && player2SearchInput) { setupComparisonSearch(player1SearchInput, player1Results, 1); setupComparisonSearch(player2SearchInput, player2Results, 2); } });