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 = () => (

Salut ! Prêt à apprendre ?

{userProgress.versesLearned}
Versets appris
{userProgress.streak}
Jours consécutifs
{userProgress.totalScore}
Points totaux

Vos catégories préférées

Amour de Dieu Force Réconfort
); const LearningPage = () => { if (!learningSession) return null; if (currentPhase === 'presentation') { const currentVerse = learningSession.verses[learningSession.currentVerseIndex]; return (

Présentation

Verset {learningSession.currentVerseIndex + 1}/{learningSession.verses.length}

{currentVerse.reference}

"{currentVerse.verse}"

{currentVerse.category}

📚 Prenez le temps de lire et mémoriser ce verset avant de passer au suivant.

); } if (currentPhase === 'practice') { if (!currentQuestion) { return (

Préparation de la question...

); } return (

Pratique

{questionsPool.length} questions restantes

{currentQuestion.type === 'reference-to-verse' ? currentQuestion.displayText : `"${currentQuestion.displayText}"` }

{currentQuestion.questionText}

{currentQuestion.answers.map((answer, index) => ( ))}
{showResult && (
{selectedAnswer === currentQuestion.correctAnswer ? '✅ Correct ! Cette question ne reviendra plus.' : `❌ Incorrect. Cette question reviendra plus tard. La bonne réponse était : ${currentQuestion.type === 'reference-to-verse' ? `"${currentQuestion.correctAnswer}"` : currentQuestion.correctAnswer}` }
)}
); } if (currentPhase === 'completed') { return (

Félicitations !

Vous avez maîtrisé les 3 versets de cette session.

Versets appris :

{learningSession.verses.map(verse => (

{verse.reference}

"{verse.verse.substring(0, 50)}..."

))}
); } }; const ReviewPage = () => { // Obtenir tous les versets avec des statistiques const learnedVersesWithStats = Object.keys(verseStats).map(verseId => { const verse = sampleVerses.find(v => v.id === parseInt(verseId)); const stats = verseStats[verseId]; return { ...verse, ...stats }; }).sort((a, b) => new Date(b.lastReview) - new Date(a.lastReview)); const formatDate = (dateString) => { if (!dateString) return '-'; const date = new Date(dateString); return date.toLocaleDateString('fr-FR', { day: '2-digit', month: '2-digit', year: 'numeric' }); }; return (

Révisions

Historique d'apprentissage

Suivi détaillé de vos progrès pour chaque verset.

{learnedVersesWithStats.length > 0 ? (
{/* En-tête du tableau */}
Verset
Référence
Répétitions
Dernière révision
{/* Lignes du tableau */}
{learnedVersesWithStats.map((verse, index) => (
{/* Verset (tronqué) */}

"{verse.verse.substring(0, 50)}{verse.verse.length > 50 ? '...' : ''}"

{/* Référence */}

{verse.reference}

{verse.category}

{/* Nombre de répétitions */}
= 5 ? 'bg-green-100 text-green-800' : verse.repetitions >= 3 ? 'bg-yellow-100 text-yellow-800' : 'bg-red-100 text-red-800' }`}> {verse.repetitions}
{/* Date de dernière révision */}

{formatDate(verse.lastReview)}

Appris le {formatDate(verse.learnedDate)}

))}
) : (

Aucun verset appris

Commencez à apprendre des versets pour voir vos statistiques ici.

)} {/* Statistiques générales */} {learnedVersesWithStats.length > 0 && (
{learnedVersesWithStats.length}
Versets appris
{learnedVersesWithStats.reduce((sum, v) => sum + v.repetitions, 0)}
Répétitions totales
{learnedVersesWithStats.filter(v => v.repetitions >= 5).length}
Versets maîtrisés
)}
); }; const ProfilePage = () => (

Mon Profil

Statistiques

{knownVerses.size}
Versets maîtrisés
{userProgress.streak}
Jours d'affilée

Abonnement Premium

Plan Premium
Accès illimité
9,99€/mois

Préférences

); return (
{/* Header */}

Bible Study

🔥 {userProgress.streak}
{/* Main Content */}
{currentPage === 'home' && } {currentPage === 'learn' && } {currentPage === 'review' && } {currentPage === 'profile' && }
{/* Bottom Navigation */}
{[ { id: 'home', icon: Home, label: 'Accueil' }, { id: 'learn', icon: BookOpen, label: 'Apprendre' }, { id: 'review', icon: RotateCcw, label: 'Réviser' }, { id: 'profile', icon: User, label: 'Profil' } ].map(({ id, icon: Icon, label }) => ( ))}
); }; export default BibleVerseApp;