let currentUuid = "= htmlspecialchars($_SESSION['Create_Riddle_Uuid'] ?? '') ?>"; // Current question UUID
let userId = "= htmlspecialchars($_SESSION['Create_Riddle_User_Id'] ?? '') ?>"; // User ID
let currentQuestionId = "= htmlspecialchars($_SESSION['Create_Riddle_Id'] ?? '') ?>"; // 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 = "= htmlspecialchars($_SESSION['Create_Riddle_Answer'] ?? '') ?>";
const createRiddleUuid = "= htmlspecialchars($_SESSION['Create_Riddle_Uuid'] ?? '') ?>";
const createRiddleToken = "= htmlspecialchars($_SESSION['Create_Riddle_Token_id'] ?? '') ?>";
const createRiddleUser_id = "= htmlspecialchars($_SESSION['Create_Riddle_User_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);