let currentUuid = ""; // Current question UUID let userId = ""; // User ID let currentQuestionId = ""; // Current question ID // Initialize counters for correct and incorrect answers in localStorage let correctAnswersCount = parseInt(localStorage.getItem('correctAnswersCount')) || 0; let incorrectAnswersCount = parseInt(localStorage.getItem('incorrectAnswersCount')) || 0; const savedName = localStorage.getItem('userName'); function getRandomEmoji(emojis) { const randomIndex = Math.floor(Math.random() * emojis.length); return emojis[randomIndex]; } function openApp() { var appScheme = "riddle://"; // Remplace par ton vrai scheme var appStoreURL = "https://apps.apple.com/app/id123456789"; // Remplace avec ton vrai lien App Store var startTime = new Date().getTime(); var appOpened = false; function checkIfAppOpened() { var elapsedTime = new Date().getTime() - startTime; if (!appOpened && elapsedTime < 2000) { window.location.href = appStoreURL; } } // 📌 Détecter si l'utilisateur quitte la page window.addEventListener("blur", function() { appOpened = true; }); document.addEventListener("visibilitychange", function() { if (document.hidden) { appOpened = true; } }); // 📌 Correction : Utiliser `replace()` pour éviter un blocage window.location.replace(appScheme); setTimeout(checkIfAppOpened, 1500); } // Update emojiDisplay function based on correct answers count function updateEmojiDisplay(correctCount) { if (correctCount >= 10) { const emojis = ['😘', '❤️', '🎉', '🔥']; emojiDisplay.textContent = getRandomEmoji(emojis); // Random emoji for more than 10 correct answers } else if (correctCount >= 5) { const emojis = ['👏', '🥰', '👍']; emojiDisplay.textContent = getRandomEmoji(emojis); // Random emoji for 5-9 correct answers } else if (correctCount >= 2) { const emojis = ['🙂', '😊', '👌']; emojiDisplay.textContent = getRandomEmoji(emojis); // Random emoji for 2-4 correct answers } else if (correctCount >= 1) { const emojis = ['😌', '🙌', '🤗']; emojiDisplay.textContent = getRandomEmoji(emojis); // Random emoji for 1 correct answer } } function updateEmojiDisplay2(incorrectCount) { if (incorrectCount >= 10) { const emojis = ['🤡', '💀', '😭']; emojiDisplay.textContent = getRandomEmoji(emojis); // Random emoji for more than 10 incorrect answers } else if (incorrectCount >= 5) { const emojis = ['💩', '🙃', '😓']; emojiDisplay.textContent = getRandomEmoji(emojis); // Random emoji for 5-9 incorrect answers } else if (incorrectCount >= 2) { const emojis = ['👎', '😑', '😬']; emojiDisplay.textContent = getRandomEmoji(emojis); // Random emoji for 2-4 incorrect answers } else if (incorrectCount >= 1) { const emojis = ['🤨', '😶', '😕']; emojiDisplay.textContent = getRandomEmoji(emojis); // Random emoji for 1 incorrect answer } } function saveChoice(createRiddleUuid, selectedAnswer, savedName, UserId) { if (!createRiddleUuid || !selectedAnswer || !savedName || !UserId) { console.error("Missing parameters for saveChoice:", { createRiddleUuid, selectedAnswer, savedName, UserId }); return; } fetch('/Ozr/saveChoice.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ uuid: createRiddleUuid, answer: selectedAnswer, name: savedName, user_id: UserId }) }) .then(response => response.json()) .then(data => { console.log("Choice saved:", data); }) .catch(error => { console.error("Error saving choice:", error); }); } function sendNotification(Token, title, body, UserId) { // Vérifier si le Token est égal à "0" et le remplacer par "123456" if (Token === "0") { Token = "123456"; } // Vérifier les paramètres manquants if (!Token || !title || !body || !UserId) { console.log("Missing parameters for sendNotification:", { Token, title, body, UserId }); return; } // Envoyer la requête POST à sendNotification.php fetch('/Ozr/sendNotification.php', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ token: Token, title: title, body: body, user_id: UserId }) }) .then(response => response.json()) .then(data => { console.log("Notification sent:", data); }) .catch(error => { console.error("Error sending notification:", error); }); } // Function to handle answer click const correctAnswer = ""; const createRiddleUuid = ""; const createRiddleToken = ""; const createRiddleUser_id = ""; const answers = document.querySelectorAll('.answer'); const notification = document.getElementById('notification'); // Notification element const emojiDisplay = document.createElement('div'); emojiDisplay.style.fontSize = '80px'; emojiDisplay.style.position = 'absolute'; emojiDisplay.style.top = '50%'; emojiDisplay.style.left = '50%'; emojiDisplay.style.transform = 'translate(-50%, -50%)'; emojiDisplay.style.display = 'none'; // Hidden by default document.body.appendChild(emojiDisplay); // Retrieve the list of already answered UUIDs let answeredUuids = JSON.parse(localStorage.getItem('answeredUuids')) || []; // Check if the current UUID has already been answered let alreadyAnswered = answeredUuids.includes(createRiddleUuid); // Déclarer le countdownInterval à un niveau global pour pouvoir l'arrêter plus tard let countdownInterval; // Si la question n'a pas encore été jouée, afficher le timer if (!alreadyAnswered) { const countdownTimer = document.getElementById('countdownTimer'); countdownTimer.style.display = 'flex'; let timeLeft = 6; countdownInterval = setInterval(() => { timeLeft--; countdownTimer.textContent = timeLeft; if (timeLeft <= 0) { clearInterval(countdownInterval); // Stopper le timer countdownTimer.style.display = 'none'; disableAnswers(); // Désactiver les réponses showTimeoutNotification(); // Afficher la notification } }, 1000); } else { // Si déjà répondu, masquer le timer const countdownTimer = document.getElementById('countdownTimer'); countdownTimer.style.display = 'none'; } // Fonction pour désactiver les réponses function disableAnswers() { // Ajouter l'UUID à la liste des réponses déjà faites et l'enregistrer dans localStorage answeredUuids.push(createRiddleUuid); localStorage.setItem('answeredUuids', JSON.stringify(answeredUuids)); answers.forEach(answer => { answer.style.pointerEvents = 'none'; // Désactiver les clics answer.style.border = '2px solid rgba(211, 211, 211, 0.5)'; // Changer la bordure // }); } // Fonction pour afficher une notification "Temps écoulé" function showTimeoutNotification() { notification.classList.remove('correct', 'incorrect', 'anonymous', 'show', 'hide'); notification.classList.add('notification', 'incorrect', 'show'); notification.textContent = "Time's up! ⏳"; setTimeout(() => { notification.classList.remove('show'); notification.classList.add('hide'); }, 3000); } answers.forEach(answer => { answer.addEventListener('click', () => { if (alreadyAnswered) { // Si l'utilisateur a déjà répondu, afficher un message et revenir notification.classList.remove('correct', 'incorrect', 'anonymous', 'show', 'hide'); notification.classList.add('notification', 'incorrect', 'show'); notification.textContent = "Whoops, you've already played for this question! 😇"; scrollToTop(); // Cacher la notification après 2 secondes setTimeout(() => { notification.classList.remove('show'); notification.classList.add('hide'); }, 2100); return; // Retourne ici sans exécuter le reste du code } alreadyAnswered = true; // Ajouter l'UUID à la liste des réponses et le sauvegarder dans localStorage answeredUuids.push(createRiddleUuid); localStorage.setItem('answeredUuids', JSON.stringify(answeredUuids)); const selectedAnswer = answer.getAttribute('data-answer'); // Désactiver toutes les réponses et les griser answers.forEach(a => { a.style.pointerEvents = 'none'; // Désactiver les clics a.style.border = '2px solid rgba(211, 211, 211, 0.5)'; // Bordure gris clair avec opacité }); // Si l'utilisateur a déjà répondu, afficher un message et revenir notification.classList.remove('correct', 'incorrect', 'anonymous', 'show', 'hide'); answer.style.border = 'none'; // Enlever la bordure de la réponse choisie pour la rendre visible // Si une réponse est cliquée avant que le timer arrive à 0, annuler le timer clearInterval(countdownInterval); // Annuler le timer ici pour éviter toute interaction avec le countdown // Mettre à jour le countdownTimer avec la valeur restante de timeLeft const countdownTimer = document.getElementById('countdownTimer'); countdownTimer.style.display = 'none'; // Vérification de la réponse if (selectedAnswer === correctAnswer) { correctAnswersCount++; localStorage.setItem('correctAnswersCount', correctAnswersCount); answer.classList.add('correct'); // Affichage de la notification de réponse correcte notification.classList.add('notification', 'correct', 'show'); notification.textContent = "True 🎉"; // Mettre à jour l'affichage des emojis updateEmojiDisplay(correctAnswersCount); // Envoyer la notification sendNotification(createRiddleToken, "Riddle", "New riddle received", createRiddleUser_id); saveChoice(createRiddleUuid, selectedAnswer, savedName, createRiddleUser_id); } else { incorrectAnswersCount++; localStorage.setItem('incorrectAnswersCount', incorrectAnswersCount); answer.classList.add('incorrect'); // Affichage de la notification de réponse incorrecte notification.classList.add('notification', 'incorrect', 'show'); notification.textContent = "False 💩"; // Mettre à jour l'affichage des emojis updateEmojiDisplay2(incorrectAnswersCount); // Envoyer la notification sendNotification(createRiddleToken, "Riddle", "New riddle received", createRiddleUser_id); saveChoice(createRiddleUuid, selectedAnswer, savedName, createRiddleUser_id); } // Affichage de l'emoji emojiDisplay.style.display = 'block'; // Cacher l'emoji après 2 secondes setTimeout(() => { emojiDisplay.style.display = 'none'; }, 2100); // Masquer la notification après 2 secondes setTimeout(() => { notification.classList.remove('show'); notification.classList.add('hide'); // Optionnellement appeler fetchNextRiddle après la notification // fetchNextRiddle(); }, 2100); // Scroll vers le haut scrollToTop(); // Désactiver toutes les réponses une fois qu'une a été choisie answers.forEach(a => a.classList.add('disabled')); }); }); // Go back function function goBack() { // Supprime la mémoire de redirection pour éviter la boucle sessionStorage.removeItem('isReturning'); sessionStorage.setItem('lastPage', 'Answer'); console.log("Referrer:", document.referrer); // Vérifie si on peut vraiment revenir en arrière if (document.referrer) { window.location.href = document.referrer; // Force la redirection vers la page précédente } else { window.history.back(); // Si aucun referrer, essaie de revenir en arrière } } // Scroll to top function function scrollToTop() { const scrollY = window.scrollY; let currentScroll = scrollY; const intervalId = setInterval(() => { currentScroll -= 10; window.scrollTo(0, currentScroll); if (currentScroll <= 0) { clearInterval(intervalId); } }, 10); } // Counter for riddles created const riddleCounterElement = document.getElementById('riddleCounter'); let currentRiddles = Math.floor(Math.random() * (3100 - 200 + 1)) + 200; // Update the riddle label function updateRiddleLabel() { riddleCounterElement.style.opacity = 0; setTimeout(() => { riddleCounterElement.innerText = `${currentRiddles} riddles 💌 created!`; riddleCounterElement.style.opacity = 1; }, 300); } // Start the riddle counter function startRiddleCounter() { updateRiddleLabel(); const interval = setInterval(() => { if (currentRiddles >= 100000) { clearInterval(interval); riddleCounterElement.innerText = "+100000 riddles 💌 created!"; return; } const increment = Math.floor(Math.random() * 100); currentRiddles = Math.min(currentRiddles + increment, 100000); updateRiddleLabel(); }, 10000); } document.addEventListener('DOMContentLoaded', startRiddleCounter);