import React, { useState, useEffect } from 'react'; import { BookOpen, User, RotateCcw, Trophy, Settings, Home, Plus, Brain } from 'lucide-react'; const BibleVerseApp = () => { const [currentPage, setCurrentPage] = useState('home'); const [learningSession, setLearningSession] = useState(null); const [currentPhase, setCurrentPhase] = useState('presentation'); const [questionsPool, setQuestionsPool] = useState([]); const [userProgress, setUserProgress] = useState({ versesLearned: 10, streak: 3, totalScore: 150, level: 1 }); const [currentQuestion, setCurrentQuestion] = useState(null); const [selectedAnswer, setSelectedAnswer] = useState(null); const [showResult, setShowResult] = useState(false); const [knownVerses, setKnownVerses] = useState(new Set()); const [reviewVerses, setReviewVerses] = useState(new Set()); const [verseStats, setVerseStats] = useState({ 1: { repetitions: 3, learnedDate: '2024-01-10', lastReview: '2024-01-14' }, 2: { repetitions: 1, learnedDate: '2024-01-12', lastReview: '2024-01-12' }, 3: { repetitions: 5, learnedDate: '2024-01-08', lastReview: '2024-01-15' }, 4: { repetitions: 2, learnedDate: '2024-01-11', lastReview: '2024-01-13' } }); const [questionNumber, setQuestionNumber] = useState(1); const sampleVerses = [ { id: 1, verse: "Car Dieu a tant aimé le monde qu'il a donné son Fils unique, afin que quiconque croit en lui ne périsse point, mais qu'il ait la vie éternelle.", reference: "Jean 3:16", category: "Amour de Dieu" }, { id: 2, verse: "Je puis tout par celui qui me fortifie.", reference: "Philippiens 4:13", category: "Force" }, { id: 3, verse: "L'Éternel est mon berger: je ne manquerai de rien.", reference: "Psaume 23:1", category: "Confiance" }, { id: 4, verse: "Ne crains rien, car je suis avec toi; Ne promène pas des regards inquiets, car je suis ton Dieu.", reference: "Ésaïe 41:10", category: "Réconfort" }, { id: 5, verse: "Cherchez premièrement le royaume et la justice de Dieu; et toutes ces choses vous seront données par-dessus.", reference: "Matthieu 6:33", category: "Priorités" }, { id: 6, verse: "Confie-toi en l'Éternel de tout ton cœur, Et ne t'appuie pas sur ta sagesse.", reference: "Proverbes 3:5", category: "Confiance" } ]; const startLearningSession = () => { // Sélectionner 3 versets aléatoirement const selectedVerses = [...sampleVerses] .sort(() => Math.random() - 0.5) .slice(0, 3); setLearningSession({ verses: selectedVerses, currentVerseIndex: 0 }); setCurrentPhase('presentation'); setQuestionNumber(1); setCurrentQuestion(null); setSelectedAnswer(null); setShowResult(false); // Créer le pool de questions initiales (2 questions par verset) const initialQuestions = []; selectedVerses.forEach(verse => { // Question 1: Verset → Référence initialQuestions.push({ id: `${verse.id}-v2r`, verse: verse, type: 'verse-to-reference', displayText: verse.verse, questionText: "Quelle est la référence de ce verset ?", correctAnswer: verse.reference, wrongAnswers: sampleVerses .filter(v => v.id !== verse.id) .sort(() => Math.random() - 0.5) .slice(0, 3) .map(v => v.reference) }); // Question 2: Référence → Verset initialQuestions.push({ id: `${verse.id}-r2v`, verse: verse, type: 'reference-to-verse', displayText: verse.reference, questionText: `Quel est le verset de ${verse.reference} ?`, correctAnswer: verse.verse, wrongAnswers: sampleVerses .filter(v => v.id !== verse.id) .sort(() => Math.random() - 0.5) .slice(0, 3) .map(v => v.verse) }); }); setQuestionsPool(initialQuestions.sort(() => Math.random() - 0.5)); }; const generateNextQuestion = () => { if (questionsPool.length === 0) { // Plus de questions - session terminée setCurrentPhase('completed'); setUserProgress(prev => ({ ...prev, versesLearned: prev.versesLearned + 3 })); return; } // Prendre la première question du pool const question = questionsPool[0]; const allAnswers = [question.correctAnswer, ...question.wrongAnswers].sort(() => Math.random() - 0.5); setCurrentQuestion({ ...question, answers: allAnswers }); setSelectedAnswer(null); setShowResult(false); }; const handleAnswerSelect = (answer) => { setSelectedAnswer(answer); setShowResult(true); if (answer === currentQuestion.correctAnswer) { // Bonne réponse - retirer cette question du pool setQuestionsPool(prev => prev.filter(q => q.id !== currentQuestion.id)); setUserProgress(prev => ({ ...prev, totalScore: prev.totalScore + 10 })); setKnownVerses(prev => new Set([...prev, currentQuestion.verse.id])); // Mettre à jour les statistiques setVerseStats(prev => { const currentStats = prev[currentQuestion.verse.id] || { repetitions: 0, learnedDate: null, lastReview: null }; const today = new Date().toISOString().split('T')[0]; return { ...prev, [currentQuestion.verse.id]: { repetitions: currentStats.repetitions + 1, learnedDate: currentStats.learnedDate || today, lastReview: today } }; }); } else { // Mauvaise réponse - remettre la question à la fin du pool setQuestionsPool(prev => { const remaining = prev.filter(q => q.id !== currentQuestion.id); return [...remaining, currentQuestion]; }); setReviewVerses(prev => new Set([...prev, currentQuestion.verse.id])); } }; const nextStep = () => { if (currentPhase === 'presentation') { if (learningSession.currentVerseIndex < learningSession.verses.length - 1) { // Passer au verset suivant dans la présentation setLearningSession(prev => ({ ...prev, currentVerseIndex: prev.currentVerseIndex + 1 })); } else { // Commencer la phase de pratique setCurrentPhase('practice'); generateNextQuestion(); } } else if (currentPhase === 'practice') { // Générer la prochaine question ou terminer generateNextQuestion(); } else { // Session terminée - retour à l'accueil setCurrentPage('home'); setLearningSession(null); setCurrentPhase('presentation'); setCurrentQuestion(null); setQuestionsPool([]); setQuestionNumber(1); setSelectedAnswer(null); setShowResult(false); } }; useEffect(() => { if (currentPhase === 'practice' && questionsPool.length > 0 && !currentQuestion) { generateNextQuestion(); } }, [currentPhase, questionsPool, currentQuestion]); const HomePage = () => (
{currentVerse.reference}
"{currentVerse.verse}"
📚 Prenez le temps de lire et mémoriser ce verset avant de passer au suivant.
Préparation de la question...
{currentQuestion.type === 'reference-to-verse' ? currentQuestion.displayText : `"${currentQuestion.displayText}"` }
{currentQuestion.questionText}
{currentQuestion.answers.map((answer, index) => ( ))}Vous avez maîtrisé les 3 versets de cette session.
{verse.reference}
"{verse.verse.substring(0, 50)}..."
Suivi détaillé de vos progrès pour chaque verset.
"{verse.verse.substring(0, 50)}{verse.verse.length > 50 ? '...' : ''}"
{verse.reference}
{verse.category}
{formatDate(verse.lastReview)}
Appris le {formatDate(verse.learnedDate)}
Commencez à apprendre des versets pour voir vos statistiques ici.