// Variables globales let monsters = []; let quests = []; let announcements = []; // Éléments DOM pour les onglets const announcementsTab = document.getElementById('announcementsTab'); const monstersTab = document.getElementById('monstersTab'); const maintenanceTab = document.getElementById('maintenanceTab'); const sectionsEls = document.querySelectorAll('.admin-section'); // Éléments DOM pour les annonces const announcementsListEl = document.getElementById('announcementsList'); const emptyAnnouncementsMessageEl = document.getElementById('emptyAnnouncementsMessage'); const addAnnouncementBtn = document.getElementById('addAnnouncementBtn'); const announcementForm = document.getElementById('announcementForm'); const announcementIdEl = document.getElementById('announcementId'); const announcementTextEl = document.getElementById('announcementText'); const announcementActiveEl = document.getElementById('announcementActive'); const announcementModalTitleEl = document.getElementById('announcementModalTitle'); // Éléments DOM pour les monstres const monstersListEl = document.getElementById('monstersList'); const emptyMonstersMessageEl = document.getElementById('emptyMonstersMessage'); const addMonsterBtn = document.getElementById('addMonsterBtn'); const monsterForm = document.getElementById('monsterForm'); const monsterIdEl = document.getElementById('monsterId'); const monsterNameEl = document.getElementById('monsterName'); const monsterImageEl = document.getElementById('monsterImage'); const monsterModalTitleEl = document.getElementById('monsterModalTitle'); // Éléments DOM pour la maintenance const cleanOldQuestsBtn = document.getElementById('cleanOldQuestsBtn'); const cleanResultEl = document.getElementById('cleanResult'); const totalMonstersCountEl = document.getElementById('totalMonstersCount'); const totalQuestsCountEl = document.getElementById('totalQuestsCount'); const smallCrownQuestsCountEl = document.getElementById('smallCrownQuestsCount'); const largeCrownQuestsCountEl = document.getElementById('largeCrownQuestsCount'); // Éléments DOM pour la confirmation de suppression const confirmDeleteBtn = document.getElementById('confirmDeleteBtn'); const confirmDeleteMessageEl = document.getElementById('confirmDeleteMessage'); const confirmDeleteTitleEl = document.getElementById('confirmDeleteTitle'); // Modales Bootstrap const announcementModal = new bootstrap.Modal(document.getElementById('announcementModal')); const monsterModal = new bootstrap.Modal(document.getElementById('monsterModal')); const confirmDeleteModal = new bootstrap.Modal(document.getElementById('confirmDeleteModal')); // Variables pour la suppression let currentDeletionType = null; let currentDeletionId = null; // Vérifier l'authentification et rediriger si nécessaire function checkAuthentication() { if (localStorage.getItem('admin_authenticated') !== 'true') { window.location.href = 'login.html'; return false; } return true; } // Déconnexion function logout() { localStorage.removeItem('admin_authenticated'); window.location.href = 'login.html?logout=true'; } // Initialisation document.addEventListener('DOMContentLoaded', () => { // Vérifier l'authentification if (!checkAuthentication()) { return; } loadData(); // Événements pour les onglets announcementsTab.addEventListener('click', (e) => { e.preventDefault(); showSection('announcementsSection'); }); monstersTab.addEventListener('click', (e) => { e.preventDefault(); showSection('monstersSection'); }); maintenanceTab.addEventListener('click', (e) => { e.preventDefault(); showSection('maintenanceSection'); updateStatistics(); }); // Événements pour les annonces addAnnouncementBtn.addEventListener('click', () => { resetAnnouncementForm(); announcementModalTitleEl.textContent = 'Ajouter une annonce'; announcementModal.show(); }); announcementForm.addEventListener('submit', handleSaveAnnouncement); // Événements pour les monstres addMonsterBtn.addEventListener('click', () => { resetMonsterForm(); monsterModalTitleEl.textContent = 'Ajouter un monstre'; monsterModal.show(); }); monsterForm.addEventListener('submit', handleSaveMonster); // Événements pour la maintenance cleanOldQuestsBtn.addEventListener('click', handleCleanOldQuests); // Événement pour la confirmation de suppression confirmDeleteBtn.addEventListener('click', handleConfirmDelete); // Événement pour la déconnexion document.getElementById('logoutBtn').addEventListener('click', logout); }); // Fonctions de chargement et sauvegarde des données function loadData() { // Vérifier si les données de jeu sont disponibles depuis data.js if (window.gameData) { // Charger les monstres depuis les données du jeu monsters = [...window.gameData.monsters]; // Charger les quêtes depuis localStorage ou utiliser les données par défaut const storedQuests = localStorage.getItem('mhw_quests'); quests = storedQuests ? JSON.parse(storedQuests) : [...window.gameData.initialQuests]; // Charger les annonces depuis localStorage ou utiliser les données par défaut const storedAnnouncements = localStorage.getItem('mhw_announcements'); announcements = storedAnnouncements ? JSON.parse(storedAnnouncements) : [...window.gameData.initialAnnouncements]; } else { // Fallback au cas où data.js n'est pas chargé console.warn("Données de jeu non disponibles. Utilisation des données locales de secours."); monsters = []; // Essayer de charger depuis localStorage const storedMonsters = localStorage.getItem('mhw_monsters'); const storedQuests = localStorage.getItem('mhw_quests'); const storedAnnouncements = localStorage.getItem('mhw_announcements'); if (storedMonsters) monsters = JSON.parse(storedMonsters); if (storedQuests) quests = JSON.parse(storedQuests); if (storedAnnouncements) announcements = JSON.parse(storedAnnouncements); } renderAnnouncementsList(); renderMonstersList(); } function saveData() { // Sauvegarder dans le localStorage localStorage.setItem('mhw_monsters', JSON.stringify(monsters)); localStorage.setItem('mhw_quests', JSON.stringify(quests)); localStorage.setItem('mhw_announcements', JSON.stringify(announcements)); console.log('Données sauvegardées'); } // Fonctions pour la navigation entre les sections function showSection(sectionId) { // Désactiver tous les onglets et masquer toutes les sections document.querySelectorAll('.list-group-item').forEach(tab => { tab.classList.remove('active'); }); sectionsEls.forEach(section => { section.classList.add('d-none'); }); // Activer l'onglet sélectionné et afficher sa section document.getElementById(sectionId).classList.remove('d-none'); if (sectionId === 'announcementsSection') { announcementsTab.classList.add('active'); } else if (sectionId === 'monstersSection') { monstersTab.classList.add('active'); } else if (sectionId === 'maintenanceSection') { maintenanceTab.classList.add('active'); } } // ============ ANNONCES ============ // Rendu de la liste des annonces function renderAnnouncementsList() { if (announcements.length === 0) { announcementsListEl.innerHTML = ''; emptyAnnouncementsMessageEl.classList.remove('d-none'); return; } emptyAnnouncementsMessageEl.classList.add('d-none'); announcementsListEl.innerHTML = announcements.map(announcement => { const statusBadge = announcement.active ? 'Active' : 'Inactive'; return `