diff --git a/public/js/admin.js b/public/js/admin.js new file mode 100644 index 0000000..067f293 --- /dev/null +++ b/public/js/admin.js @@ -0,0 +1,1025 @@ +document.addEventListener("DOMContentLoaded", function() { + const savedPassword = localStorage.getItem("adminPassword"); + const loginForm = document.getElementById("login-form"); + const adminArea = document.getElementById("admin-area"); + const sidebar = document.getElementById("sidebar"); + const errorMessage = document.getElementById("error-message"); + const passwordInput = document.querySelector("input[name='password']"); + const timerDisplay = document.getElementById('logout-timer'); // Logout-Timer Element + + let inactivityTimeout; + let logoutTimerInterval; // Variable für den Timer-Interval + let timeRemaining = 5 * 60 * 1000; // 5 Minuten in Millisekunden + + function resetInactivityTimer() { + clearTimeout(inactivityTimeout); + clearInterval(logoutTimerInterval); // Timer-Interval zurücksetzen + timeRemaining = 5 * 60 * 1000; // Reset des verbleibenden Zeitlimits + startLogoutTimer(); // Timer neu starten + + inactivityTimeout = setTimeout(() => { + logout(); // Automatischer Logout nach Inaktivität + }, 5 * 60 * 1000); // 5 Minuten Timeout + } + + // Überprüfen, ob ein Passwort gespeichert ist + if (savedPassword) { + loginForm.style.display = 'none'; + adminArea.style.display = 'block'; + sidebar.style.display = 'block'; + timerDisplay.style.display = 'block'; // Timer anzeigen, wenn eingeloggt + loadDashboard(); + resetInactivityTimer(); // Timer bei Start setzen + startLogoutTimer(); // Starte den Timer, wenn der Benutzer eingeloggt ist + } else { + // Standardmäßig den Timer ausblenden, wenn der Benutzer nicht eingeloggt ist + timerDisplay.style.display = 'none'; + } + + // Holen Sie sich das Passwort von der API + fetch('/api/admin-password') + .then(response => response.json()) + .then(data => { + const correctPassword = data.password; + + document.getElementById("form").onsubmit = function(event) { + event.preventDefault(); + const password = event.target.password.value; + + if (password === correctPassword) { + localStorage.setItem("adminPassword", password); + loginForm.style.display = 'none'; + adminArea.style.display = 'block'; + sidebar.style.display = 'block'; + timerDisplay.style.display = 'block'; // Timer anzeigen, wenn eingeloggt + errorMessage.style.display = 'none'; + loadDashboard(); + resetInactivityTimer(); + } else { + // Passwortfeld verstecken und Fehlermeldung anstelle des Passwortfelds anzeigen + passwordInput.style.display = 'none'; + errorMessage.style.display = 'block'; + + // Nach 3 Sekunden das Passwortfeld wieder anzeigen und Fehlermeldung ausblenden + setTimeout(() => { + passwordInput.style.display = 'block'; + errorMessage.style.display = 'none'; + passwordInput.value = ''; // Passwortfeld leeren + }, 3000); // 3 Sekunden Timeout + } + }; + }) + .catch(error => { + console.error('Fehler beim Abrufen des Passworts:', error); + errorMessage.textContent = 'Fehler beim Laden des Passworts.'; + errorMessage.style.display = 'block'; + }); + + window.logout = function() { + localStorage.removeItem("adminPassword"); + adminArea.style.display = 'none'; + loginForm.style.display = 'block'; + sidebar.style.display = 'none'; + timerDisplay.style.display = 'none'; // Timer ausblenden beim Logout + + // Login-Seite neu laden + location.reload(); + }; + + // Events, die Inaktivität verhindern: Mausbewegung, Tastatureingabe, etc. + window.addEventListener('mousemove', resetInactivityTimer); + window.addEventListener('keydown', resetInactivityTimer); + window.addEventListener('click', resetInactivityTimer); + + // Timer-Funktion für den automatischen Logout + function startLogoutTimer() { + logoutTimerInterval = setInterval(() => { + const minutes = Math.floor((timeRemaining / 1000 / 60) % 60); + const seconds = Math.floor((timeRemaining / 1000) % 60); + + timerDisplay.textContent = `Automatischer Logout in: ${minutes}:${seconds < 10 ? '0' : ''}${seconds}`; + + timeRemaining -= 1000; // Jede Sekunde 1000ms abziehen + + if (timeRemaining < 0) { + clearInterval(logoutTimerInterval); + logout(); // Führe Logout-Funktion aus + } + }, 1000); + } + + document.getElementById('dashboard-link').onclick = function() { + document.getElementById('dashboard').style.display = 'block'; + document.getElementById('logs').style.display = 'none'; + document.getElementById('wishes').style.display = 'none'; // Wünsche ausblenden + document.getElementById('feedback').style.display = 'none'; // Feedback ausblenden + document.getElementById('users').style.display = 'none'; + document.getElementById('admin-help').style.display = 'none'; + document.getElementById('faq-container').style.display = 'none'; // FAQ-Bereich ausblenden + document.getElementById('send-message').style.display = 'none'; // Send Message ausblenden + document.getElementById('backups').style.display = 'none'; + document.getElementById('dev-report').style.display = 'none'; + }; + + document.getElementById('logs-link').onclick = function() { + document.getElementById('dashboard').style.display = 'none'; + document.getElementById('logs').style.display = 'block'; + document.getElementById('wishes').style.display = 'none'; // Wünsche ausblenden + document.getElementById('feedback').style.display = 'none'; // Feedback ausblenden + loadLogs(); // Logs laden, wenn der Bereich angezeigt wird + document.getElementById('users').style.display = 'none'; + document.getElementById('admin-help').style.display = 'none'; + document.getElementById('faq-container').style.display = 'none'; // FAQ-Bereich ausblenden + document.getElementById('send-message').style.display = 'none'; // Send Message ausblenden + document.getElementById('backups').style.display = 'none'; + document.getElementById('dev-report').style.display = 'none'; + }; + + document.getElementById('wishes-link').onclick = function() { + document.getElementById('dashboard').style.display = 'none'; + document.getElementById('logs').style.display = 'none'; + document.getElementById('wishes').style.display = 'block'; // Wünsche anzeigen + loadWishes(); // Offene Wünsche laden, wenn der Bereich angezeigt wird + document.getElementById('users').style.display = 'none'; + document.getElementById('feedback').style.display = 'none'; + document.getElementById('faq-container').style.display = 'none'; // FAQ-Bereich ausblenden + document.getElementById('admin-help').style.display = 'none'; + document.getElementById('send-message').style.display = 'none'; // Send Message ausblenden + document.getElementById('backups').style.display = 'none'; + document.getElementById('dev-report').style.display = 'none'; + }; + + document.getElementById('feedback-link').onclick = function() { + document.getElementById('dashboard').style.display = 'none'; + document.getElementById('faq-container').style.display = 'none'; // FAQ-Bereich ausblenden + document.getElementById('logs').style.display = 'none'; + document.getElementById('wishes').style.display = 'none'; // Wünsche ausblenden + document.getElementById('feedback').style.display = 'block'; // Feedback anzeigen + loadFeedback(); // Feedback laden, wenn der Bereich angezeigt wird + document.getElementById('users').style.display = 'none'; + document.getElementById('admin-help').style.display = 'none'; + document.getElementById('send-message').style.display = 'none'; // Send Message ausblenden + document.getElementById('backups').style.display = 'none'; + document.getElementById('dev-report').style.display = 'none'; + }; + + document.getElementById('admin-help-link').onclick = function() { + document.getElementById('dashboard').style.display = 'none'; + document.getElementById('logs').style.display = 'none'; + document.getElementById('faq-container').style.display = 'none'; // FAQ-Bereich ausblenden + document.getElementById('wishes').style.display = 'none'; // Wünsche ausblenden + document.getElementById('feedback').style.display = 'none'; // Feedback ausblenden + document.getElementById('admin-help').style.display = 'block'; // Admin Hilfe anzeigen + document.getElementById('users').style.display = 'none'; + document.getElementById('send-message').style.display = 'none'; // Send Message ausblenden + document.getElementById('backups').style.display = 'none'; + document.getElementById('dev-report').style.display = 'none'; + }; + + document.getElementById('users-link').onclick = function() { + document.getElementById('dashboard').style.display = 'none'; + document.getElementById('logs').style.display = 'none'; + document.getElementById('wishes').style.display = 'none'; + document.getElementById('feedback').style.display = 'none'; + document.getElementById('faq-container').style.display = 'none'; // FAQ-Bereich ausblenden + document.getElementById('users').style.display = 'block'; + loadUsers(); // Benutzer laden, wenn der Bereich angezeigt wird + document.getElementById('admin-help').style.display = 'none'; + document.getElementById('send-message').style.display = 'none'; + document.getElementById('dev-report').style.display = 'none'; + document.getElementById('backups').style.display = 'none'; + }; + + // Send Message Link + document.getElementById('send-message-link').onclick = function() { + document.getElementById('dashboard').style.display = 'none'; + document.getElementById('logs').style.display = 'none'; + document.getElementById('wishes').style.display = 'none'; + document.getElementById('feedback').style.display = 'none'; + document.getElementById('users').style.display = 'none'; + document.getElementById('faq-container').style.display = 'none'; // FAQ-Bereich ausblenden + document.getElementById('admin-help').style.display = 'none'; + document.getElementById('send-message').style.display = 'block'; // Send Message anzeigen + document.getElementById('dev-report').style.display = 'none'; + document.getElementById('backups').style.display = 'none'; + }; + + document.getElementById('backups-link').onclick = function() { + document.getElementById('dashboard').style.display = 'none'; + document.getElementById('logs').style.display = 'none'; + document.getElementById('wishes').style.display = 'none'; + document.getElementById('feedback').style.display = 'none'; + document.getElementById('users').style.display = 'none'; + document.getElementById('admin-help').style.display = 'none'; + document.getElementById('send-message').style.display = 'none'; + document.getElementById('faq-container').style.display = 'none'; // FAQ-Bereich ausblenden + document.getElementById('dev-report').style.display = 'none'; + document.getElementById('backups').style.display = 'block'; // Backups anzeigen + loadBackups(); // Backups laden, wenn der Bereich angezeigt wird + }; + + document.getElementById('dev-report-link').onclick = function() { + document.getElementById('dashboard').style.display = 'none'; + document.getElementById('logs').style.display = 'none'; + document.getElementById('wishes').style.display = 'none'; + document.getElementById('faq-container').style.display = 'none'; // FAQ-Bereich ausblenden + document.getElementById('users').style.display = 'none'; + document.getElementById('feedback').style.display = 'none'; + document.getElementById('admin-help').style.display = 'none'; + document.getElementById('send-message').style.display = 'none'; // Send Message ausblenden + document.getElementById('backups').style.display = 'none'; + document.getElementById('dev-report').style.display = 'block'; // Dev Report anzeigen + loadDevReports(); // Dev Reports laden, wenn der Bereich angezeigt wird + }; + + document.getElementById('faq-link').onclick = function() { + document.getElementById('dashboard').style.display = 'none'; + document.getElementById('logs').style.display = 'none'; + document.getElementById('wishes').style.display = 'none'; + document.getElementById('feedback').style.display = 'none'; + document.getElementById('faq-container').style.display = 'block'; // FAQ-Bereich anzeigen + document.getElementById('users').style.display = 'none'; + document.getElementById('admin-help').style.display = 'none'; + document.getElementById('send-message').style.display = 'none'; + document.getElementById('backups').style.display = 'none'; + document.getElementById('dev-report').style.display = 'none'; + fetchFaqs(); // FAQs laden, wenn der Bereich angezeigt wird + }; + + }); + + function loadDashboard() { + fetchBotUptime(); + fetchFileCheck(); + fetchServerInfo(); + document.getElementById('dashboard').style.display = 'block'; + } + + function loadLogs() { + fetchCommandHistory(); + fetchErrorLog(); + } + // Funktion zum Laden der Wünsche + function loadWishes() { + fetch('/api/wishes') // Endpoint für offene Wünsche + .then(response => response.json()) + .then(data => { + const wishesDiv = document.getElementById('wishes-content'); + wishesDiv.innerHTML = ''; // Vorherige Inhalte leeren + if (data.length === 0) { + wishesDiv.innerHTML = '
Keine offenen Wünsche vorhanden.
'; + } else { + data.forEach((wish) => { + wishesDiv.innerHTML += ` +Fehler beim Laden der Wünsche.
'; + }); + } + + // Automatisches Aktualisieren des Wunsch alle 10 Sekunden + setInterval(() => { + loadWishes(); + }, 10000); // 10 Sekunden (10000 Millisekunden) + + + // Funktion zum Laden des Feedbacks + function loadFeedback() { + fetch('/api/feedback') + .then(response => response.text()) + .then(data => { + const feedbackDiv = document.getElementById('feedback-content'); + feedbackDiv.innerHTML = ''; // Vorherige Inhalte leeren + + const feedbackLines = data.split('\n'); + feedbackLines.slice(1).forEach((line) => { // Ignoriere die erste Zeile + if (line.trim()) { + const feedbackMessage = line.split(' - ')[1]; // Nur den Feedback-Teil extrahieren + feedbackDiv.innerHTML += ` +Kein Feedback vorhanden.
'; + } + }) + .catch(error => { + console.error('Fehler beim Laden des Feedbacks:', error); + document.getElementById('feedback-content').innerHTML = 'Fehler beim Laden des Feedbacks.
'; + }); + } + + // Automatisches Aktualisieren des Feedbacks alle 10 Sekunden + setInterval(() => { + loadFeedback(); + }, 10000); // 10 Sekunden (10000 Millisekunden) + + + function fetchBotUptime() { + fetch('/api/bot-uptime') + .then(response => response.json()) + .then(data => { + document.getElementById('bot-uptime').innerText = `Aktuelle Laufzeit des Bots: ${data.runtime}`; + }) + .catch(error => console.error('Fehler beim Abrufen der Bot-Laufzeit:', error)); + } + + // Funktion, um die Bot-Laufzeit regelmäßig zu aktualisieren + function startUptimeUpdate() { + fetchBotUptime(); // Initialen Aufruf + setInterval(fetchBotUptime, 1000); // Alle 5 Sekunden aktualisieren + } + + // Aufruf der Startfunktion, wenn das Admin-Dashboard geladen wird + document.addEventListener("DOMContentLoaded", function() { + startUptimeUpdate(); + }); + + function fetchFileCheck() { + fetch('/api/file-check') + .then(response => response.json()) + .then(data => { + const fileCheckDiv = document.getElementById('file-check'); + fileCheckDiv.innerHTML = '${file.exists ? '✅' : '❌'} Datei ${file.file} ${file.exists ? 'ist vorhanden.' : 'fehlt.'}
`; + }); + }) + .catch(error => console.error('Fehler beim Abrufen der Dateiüberprüfung:', error)); + } + + // Automatisches Abrufen der Dateiüberprüfung alle 10 Sekunden + setInterval(fetchFileCheck, 10000); + + // Optional: Einmaliges Abrufen, wenn die Seite geladen wird + window.onload = fetchFileCheck; + + function fetchServerInfo() { + fetch('/api/server-info') + .then(response => response.json()) + .then(data => { + document.getElementById('server-info').innerHTML = ` +Plattform: ${data.platform}
+Architektur: ${data.architecture}
+Gesamter Speicher: ${data.totalMemory} GB
+Freier Speicher: ${data.freeMemory} GB
+ `; + }) + .catch(error => console.error('Fehler beim Abrufen der Serverinformationen:', error)); + } + + // Funktion zum Abrufen des Fehlerprotokolls +function fetchErrorLog() { + fetch('/api/error-log') + .then(response => response.text()) + .then(data => { + document.getElementById('error-log').querySelector('pre').innerText = data; + }) + .catch(error => console.error('Fehler beim Abrufen des Fehlerprotokolls:', error)); +} + +let errorNotified = false; // Variable, um den Status der Benachrichtigung zu verfolgen + +// Funktion zum Überprüfen des error.log +function checkErrorLog() { + const savedPassword = localStorage.getItem("adminPassword"); // Überprüfen, ob der Benutzer eingeloggt ist + + if (!savedPassword) return; // Beende die Funktion, wenn der Benutzer nicht eingeloggt ist + + fetch('/api/error-log') + .then(response => response.text()) + .then(data => { + const welcomeBox = document.querySelector('.welcome-box'); + + // Überprüfe, ob Fehler im Log vorhanden sind + if (data && data.trim().length > 0) { + if (!errorNotified) { // Nur Benachrichtigung anzeigen, wenn sie noch nicht angezeigt wird + welcomeBox.innerHTML += ` +Keine Benutzer vorhanden.
'; + } else { + data.forEach((user, index) => { + // Bestimme die Klasse basierend auf der Index-Position + const className = index % 2 === 0 ? 'even' : 'odd'; // Klassen für gerade und ungerade Indizes + + usersDiv.innerHTML += ` +Benutzername: ${user.username}
+Benachrichtigungen: ${user.notifications ? 'Aktiviert' : 'Deaktiviert'}
+Erstnutzung: ${user.firstUsed}
+Lieblingsgenre: ${user.favoriteGenre || 'Nicht festgelegt'}
+Befehlsanzahl: ${user.commandCount}
+Benutzerlevel: ${user.userLevel}
+ +Fehler beim Laden der Benutzerinformationen.
'; + }); + } + + // Funktion zum Löschen eines Benutzers + function deleteUser(userId) { + if (confirm('Möchtest du diesen Benutzer wirklich löschen?')) { + fetch(`/api/users/${userId}`, { + method: 'DELETE', + }) + .then(response => response.json()) + .then(data => { + alert(data.message); + loadUsers(); // Nach dem Löschen die Benutzerliste neu laden + }) + .catch(error => { + console.error('Fehler beim Löschen des Benutzers:', error); + alert('Fehler beim Löschen des Benutzers.'); + }); + } + } + + // Funktion zum Starten der automatischen Aktualisierung + function startAutoRefresh() { + loadUsers(); // Einmaliges Laden der Benutzer beim Start + setInterval(loadUsers, 10000); // Alle 10 Sekunden aktualisieren + } + + // Stelle sicher, dass die Funktion beim Laden der Seite aufgerufen wird + window.onload = startAutoRefresh; + + + + function fetchLastRestart() { + fetch('/api/last-restart') + .then(response => response.json()) + .then(data => { + document.getElementById('bot-restart').innerText = `Letzter Neustart: ${data.lastRestart}`; + }) + .catch(error => console.error('Fehler beim Abrufen des letzten Neustarts:', error)); +} + +// Stelle sicher, dass die Funktion beim Laden des Dashboards aufgerufen wird +function loadDashboard() { + fetchBotUptime(); + fetchLastRestart(); // Hinzufügen dieser Zeile + fetchFileCheck(); + fetchServerInfo(); + document.getElementById('dashboard').style.display = 'block'; +} + + + function sendMessage() { + const message = document.getElementById('message-input').value; + const statusDiv = document.getElementById('send-message-status'); + + if (!message) { + statusDiv.innerHTML = 'Bitte gib eine Nachricht ein.'; + return; + } + + fetch('/api/send-message', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ message }), + }) + .then(response => response.json()) + .then(data => { + if (data.success) { + statusDiv.innerHTML = 'Nachricht erfolgreich gesendet!'; + } else { + statusDiv.innerHTML = `Fehler: ${data.error}`; + } + }) + .catch(error => { + console.error('Fehler beim Senden der Nachricht:', error); + statusDiv.innerHTML = 'Ein Fehler ist aufgetreten.'; + }); + } + + // Hier kann eine Funktion hinzugefügt werden, um den Abschnitt anzuzeigen + document.getElementById('send-message-link').addEventListener('click', function() { + document.getElementById('send-message').style.display = 'block'; + }); + + async function loadMediaCount() { + try { + const response = await fetch('/api/media-count'); + if (!response.ok) { + throw new Error('Netzwerkantwort war nicht ok'); + } + const data = await response.json(); + console.log('Medienanzahl-Daten:', data); // Debugging-Ausgabe + + const mediaCountContent = document.getElementById('media-count-content'); + mediaCountContent.innerHTML = ` + 📽️ Filme: ${data.movieCount}Keine Backups vorhanden.
'; + } + }) + .catch(error => { + console.error('Fehler beim Laden der Backups:', error); + document.getElementById('backups-list').innerHTML = 'Fehler beim Laden der Backups.
'; + }); + } + + // Funktion zum Löschen eines Backups +function deleteBackup(backupName) { + fetch('/api/delete-backup', { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ backupName }) + }) + .then(response => response.json()) + .then(data => { + if (data.success) { + // Nach dem Löschen die Backups erneut laden + loadBackups(); + } else { + console.error('Fehler beim Löschen des Backups:', data.error); + } + }) + .catch(error => { + console.error('Fehler beim Löschen des Backups:', error); + }); +} + + // Automatisches Laden der Berichte alle 5 Sekunden (5000 Millisekunden) + setInterval(loadDevReports, 5000); + + +function loadDevReports() { + fetch('/api/dev-reports') // Ersetze den URL mit deinem tatsächlichen Endpunkt + .then(response => response.json()) + .then(data => { + const devReportDiv = document.getElementById('dev-report-content'); + devReportDiv.innerHTML = ''; // Vorherige Inhalte leeren + + if (data.length === 0) { + devReportDiv.innerHTML = 'Keine Entwicklerberichte vorhanden.
'; + } else { + data.forEach(report => { + const reportClass = report.type === "Bug" ? "bug" : "feature-request"; // Klasse basierend auf dem Typ auswählen + const userName = report.user.name; // Den Namen des Benutzers aus dem Bericht holen + const message = report.message; // Den Text der Nachricht holen + + devReportDiv.innerHTML += ` +Fehler beim Laden der Entwicklerberichte.
'; + }); +} + +function deleteDevReport(reportId) { + fetch(`/api/dev-reports?id=${reportId}`, { method: 'DELETE' }) // Verwende hier die korrekte URL mit Query-Parameter + .then(response => { + if (response.ok) { + loadDevReports(); // Berichte nach dem Löschen neu laden + } else { + console.error('Fehler beim Löschen des Berichts:', response.statusText); + } + }) + .catch(error => console.error('Fehler beim Löschen des Berichts:', error)); +} + +// Funktion zum Abrufen der FAQs +function fetchFaqs() { + fetch('/api/faqs') + .then(response => response.json()) + .then(data => { + const faqSection = document.getElementById('faq-container'); // ID anpassen + let faqText = ''; + + if (data.length === 0) { + faqText = 'Es gibt derzeit keine FAQs.'; + } else { + data.forEach((faq, index) => { + faqText += `${index + 1}. *${faq.question}*\n${faq.answer}\n\n`; + }); + } + faqSection.querySelector('pre').innerText = faqText; // Text im-Tag setzen + }) + .catch(error => console.error('Fehler beim Abrufen der FAQs:', error)); +} + +// Funktion zum Hinzufügen einer neuen FAQ +function addFaq() { + const question = prompt('Bitte geben Sie die FAQ-Frage ein:'); + if (question) { + const answer = prompt('Bitte geben Sie die Antwort ein:'); + if (answer) { + fetch('/api/add-faq', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ question, answer }), + }) + .then(response => response.json()) + .then(data => { + const alertBox = document.createElement('div'); + alertBox.className = 'alert'; // Grundlegende Alert-Klasse + + if (data.success) { + alertBox.classList.add('success'); // Erfolgsklasse hinzufügen + alertBox.innerText = '✅ FAQ erfolgreich hinzugefügt.'; + } else { + alertBox.classList.add('error'); // Fehlerklasse hinzufügen + alertBox.innerText = '❌ Fehler beim Hinzufügen der FAQ.'; + } + + // Füge die Alert-Meldung zum FAQ-Bereich hinzu + document.getElementById('faq-container').appendChild(alertBox); + alertBox.style.display = 'block'; // Zeige die Meldung an + + // Nach einer kurzen Zeit die Meldung ausblenden + setTimeout(() => { + alertBox.style.display = 'none'; + }, 5000); // 5 Sekunden warten, dann ausblenden + + fetchFaqs(); // FAQs neu laden + }) + .catch(error => { + const alertBox = document.createElement('div'); + alertBox.className = 'alert error'; // Fehlerklasse hinzufügen + alertBox.innerText = '❌ Fehler beim Hinzufügen der FAQ.'; + document.getElementById('faq-container').appendChild(alertBox); + alertBox.style.display = 'block'; // Zeige die Fehlermeldung an + + // Nach einer kurzen Zeit die Meldung ausblenden + setTimeout(() => { + alertBox.style.display = 'none'; + }, 5000); // 5 Sekunden warten, dann ausblenden + + console.error('Fehler beim Hinzufügen der FAQ:', error); + }); + } + } +} + +// Funktion zum Löschen einer FAQ +function deleteFaq() { + fetch('/api/faqs') + .then(response => response.json()) + .then(data => { + if (data.length === 0) { + alert('Es gibt derzeit keine FAQs zum Löschen.'); + return; + } + + let faqText = 'Welche FAQ möchten Sie löschen?\n\n'; + data.forEach((faq, index) => { + faqText += `${index + 1}. *${faq.question}*\n`; + }); + + const faqIndex = prompt(faqText); + const index = parseInt(faqIndex, 10) - 1; + + if (index >= 0 && index < data.length) { + fetch('/api/delete-faq', { + method: 'DELETE', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ index }), + }) + .then(response => response.json()) + .then(data => { + if (data.success) { + alert('✅ FAQ erfolgreich gelöscht.'); + fetchFaqs(); // FAQs neu laden + } else { + alert('❌ Fehler beim Löschen der FAQ.'); + } + }) + .catch(error => console.error('Fehler beim Löschen der FAQ:', error)); + } else { + alert('❌ Ungültige Auswahl.'); + } + }) + .catch(error => console.error('Fehler beim Abrufen der FAQs:', error)); +} + +// Darkmode umschalten +const toggle = document.getElementById('dark-mode-toggle'); + +// Darkmode-Zustand beim Laden der Seite überprüfen und anwenden +const darkModeEnabled = localStorage.getItem('darkMode') === 'true'; +toggle.checked = darkModeEnabled; +if (darkModeEnabled) { + document.body.classList.add('dark-mode'); +} + +toggle.addEventListener('change', () => { + const isChecked = toggle.checked; + document.body.classList.toggle('dark-mode', isChecked); + // Speichere den Zustand in localStorage + localStorage.setItem('darkMode', isChecked); +}); \ No newline at end of file