const API_BASE_URL = 'https://monpetitpari.fr/api';
async function apiCall(endpoint, method = 'GET', data = null) {
const options = {
method: method,
headers: { 'Content-Type': 'application/json' }
};
const token = localStorage.getItem('authToken');
if (token) options.headers['Authorization'] = `Bearer ${token}`;
if (data && (method === 'POST' || method === 'PUT')) {
options.body = JSON.stringify(data);
}
const response = await fetch(`${API_BASE_URL}/${endpoint}`, options);
const result = await response.json();
if (!response.ok) throw new Error(result.error || 'Erreur serveur');
return result;
}
window.onload = function() {
const user = JSON.parse(localStorage.getItem('currentUser'));
if (!user || user.role !== 'admin') {
window.location.href = 'index.html';
return;
}
document.getElementById('adminName').textContent = user.username;
loadAdminStats();
};
function logout() {
localStorage.removeItem('currentUser');
localStorage.removeItem('authToken');
window.location.href = 'index.html';
}
function showAdminSection(sectionId) {
document.querySelectorAll('.section').forEach(s => s.classList.remove('active'));
document.querySelectorAll('.sidebar li').forEach(l => l.classList.remove('active'));
document.getElementById(sectionId).classList.add('active');
event.target.classList.add('active');
if (sectionId === 'matches') loadMatchesTable();
if (sectionId === 'users') loadUsersTable();
if (sectionId === 'results') loadResultsDropdown();
}
async function loadAdminStats() {
try {
const users = await apiCall('users.php');
const matches = await apiCall('matches.php');
const players = await apiCall('players.php');
document.getElementById('totalUsers').textContent = users.users ? users.users.length : 0;
document.getElementById('totalMatches').textContent = matches.matches ? matches.matches.length : 0;
document.getElementById('totalPlayers').textContent = players.players ? players.players.length : 0;
} catch (error) {
console.error('Erreur stats admin', error);
}
}
async function loadMatchesTable() {
try {
const result = await apiCall('matches.php');
const tbody = document.getElementById('matchesTable');
if(!tbody) return;
tbody.innerHTML = '';
if(result.matches) {
result.matches.forEach(match => {
const row = document.createElement('tr');
// Gestion de l'affichage selon le format retourné par getAllMatches()
const p1Name = match.p1_name || (match.player1 && match.player1.name) || 'Inconnu';
const p2Name = match.p2_name || (match.player2 && match.player2.name) || 'Inconnu';
row.innerHTML = `
${match.round} |
${p1Name} |
${p2Name} |
${new Date(match.match_date || match.date).toLocaleDateString('fr-FR')} |
${match.status === 'completed' ? 'Terminé' : 'À venir'} |
|
`;
tbody.appendChild(row);
});
}
} catch(e) { console.error(e); }
}
async function loadUsersTable() {
try {
const result = await apiCall('users.php');
const tbody = document.getElementById('usersTable');
if(!tbody) return;
tbody.innerHTML = '';
if(result.users) {
result.users.forEach(user => {
const row = document.createElement('tr');
row.innerHTML = `
${user.id} |
${user.username} |
${user.email} |
${user.role} |
${user.points || 0} |
|
`;
tbody.appendChild(row);
});
}
} catch(e) { console.error(e); }
}
async function deleteUser(id) {
if (confirm('Êtes-vous sûr de vouloir supprimer cet utilisateur ?')) {
try {
await apiCall(`users.php?id=${id}`, 'DELETE');
loadUsersTable();
loadAdminStats();
} catch(e) { alert(e.message); }
}
}
async function deleteMatch(id) {
if (confirm('Êtes-vous sûr de vouloir supprimer ce match ?')) {
try {
await apiCall(`matches.php?id=${id}`, 'DELETE');
loadMatchesTable();
loadAdminStats();
} catch(e) { alert(e.message); }
}
}
async function loadResultsDropdown() {
try {
const result = await apiCall('matches.php');
const select = document.getElementById('resultMatch');
if(!select) return;
select.innerHTML = '';
window.currentAdminMatches = result.matches || [];
window.currentAdminMatches.filter(m => m.status !== 'completed').forEach(match => {
const option = document.createElement('option');
option.value = match.id;
const p1Name = match.p1_name || (match.player1 && match.player1.name);
const p2Name = match.p2_name || (match.player2 && match.player2.name);
option.textContent = `${match.round} : ${p1Name} vs ${p2Name}`;
select.appendChild(option);
});
updateWinnerSelect();
select.addEventListener('change', updateWinnerSelect);
} catch(e) { console.error(e); }
}
function updateWinnerSelect() {
const select = document.getElementById('resultMatch');
const winnerSelect = document.getElementById('resultWinner');
if(select.selectedIndex === -1 || !window.currentAdminMatches) return;
const matchId = parseInt(select.value);
const match = window.currentAdminMatches.find(m => m.id === matchId);
winnerSelect.innerHTML = '';
if (match) {
const p1Id = match.p1_id || (match.player1 && match.player1.id);
const p1Name = match.p1_name || (match.player1 && match.player1.name);
const p2Id = match.p2_id || (match.player2 && match.player2.id);
const p2Name = match.p2_name || (match.player2 && match.player2.name);
winnerSelect.innerHTML = `
`;
}
}
async function updateResult() {
const matchId = parseInt(document.getElementById('resultMatch').value);
const winnerId = parseInt(document.getElementById('resultWinner').value);
const score = document.getElementById('resultScore').value;
try {
await apiCall('results.php', 'POST', {
match_id: matchId,
winner_id: winnerId,
score: score
});
alert('Résultat mis à jour avec succès ! Les points ont été distribués.');
loadResultsDropdown();
} catch (error) {
alert(error.message);
}
}