18/12/2025 - 17:49 Posted by Leonardo Silva SantosNo comments
import React, { useState, useEffect } from 'react';
import { Book, Settings, ChevronRight, CheckCircle, XCircle, RefreshCcw, Award, Scroll, Users, BarChart, Loader2 } from 'lucide-react';
// Banco de Questões Expandido (10 Perguntas)
// Tags: 'antigo', 'novo' para filtros básicos
const fullQuestionBank = [
{
id: 1,
testament: 'novo',
question: "Na transfiguração de Jesus, descrita nos Evangelhos, duas figuras importantes do Antigo Testamento apareceram conversando com Ele. Quem eram elas?",
options: [
{ id: 'A', text: "Abraão e Davi", rationale: "Embora sejam patriarcas importantes, não foram eles que apareceram no monte da transfiguração." },
{ id: 'B', text: "Moisés e Elias", rationale: "Correto! Moisés representa a Lei e Elias representa os Profetas. (Ref: Mateus 17:3 NVT)", isCorrect: true },
{ id: 'C', text: "Enoque e Elias", rationale: "Enoque e Elias foram traslados, mas o texto bíblico especifica que Moisés estava presente." },
{ id: 'D', text: "Isaías e Jeremias", rationale: "Estes são profetas maiores, mas não foram os que apareceram." }
]
},
{
id: 2,
testament: 'novo',
question: "Segundo Hebreus, quais eram os três itens contidos dentro da Arca da Aliança?",
options: [
{ id: 'A', text: "Um pote com maná, a vara de Arão e as tábuas da aliança", rationale: "Correto! Hebreus 9:4 detalha esses três itens no Santo dos Santos. (Ref: Hebreus 9:4 NVT)", isCorrect: true },
{ id: 'B', text: "As tábuas da lei, o cajado de Moisés e um frasco de azeite", rationale: "O cajado foi o de Arão, não o de Moisés. O azeite não estava na Arca." },
{ id: 'C', text: "As roupas sacerdotais, o Urim e o Tumim", rationale: "Itens do Sumo Sacerdote, não guardados dentro da Arca." },
{ id: 'D', text: "Um pedaço da serpente de bronze, incenso e as tábuas", rationale: "A serpente de bronze não ficava na Arca." }
]
},
{
id: 3,
testament: 'antigo',
question: "Quem foi o profeta enviado por Deus para confrontar o rei Davi após o pecado com Bate-Seba?",
options: [
{ id: 'A', text: "Samuel", rationale: "Samuel já havia falecido nesta época." },
{ id: 'B', text: "Natã", rationale: "Correto! Natã contou a parábola da ovelha para levar Davi ao arrependimento. (Ref: 2 Samuel 12:1-7 NVT)", isCorrect: true },
{ id: 'C', text: "Elias", rationale: "Elias viveu muito tempo depois." },
{ id: 'D', text: "Eliseu", rationale: "Eliseu viveu gerações após Davi." }
]
},
{
id: 4,
testament: 'novo',
question: "Em Atos, quem foi o primeiro mártir cristão apedrejado enquanto via o céu aberto?",
options: [
{ id: 'A', text: "Tiago", rationale: "Tiago foi morto à espada por Herodes." },
{ id: 'B', text: "Estêvão", rationale: "Correto! Estêvão foi apedrejado enquanto Saul observava. (Ref: Atos 7:55-60 NVT)", isCorrect: true },
{ id: 'C', text: "Pedro", rationale: "Pedro foi martirizado muito mais tarde." },
{ id: 'D', text: "Barnabé", rationale: "O relato de Atos 7 refere-se a Estêvão." }
]
},
{
id: 5,
testament: 'novo',
question: "Qual é a definição bíblica de fé apresentada em Hebreus 11:1?",
options: [
{ id: 'A', text: "Um sentimento forte de otimismo.", rationale: "A fé bíblica é mais que um sentimento." },
{ id: 'B', text: "A realidade daquilo que esperamos; a prova de coisas que não vemos.", rationale: "Correto! Essa é a definição exata da NVT. (Ref: Hebreus 11:1 NVT)", isCorrect: true },
{ id: 'C', text: "A certeza da prosperidade material.", rationale: "O texto define a fé de maneira existencial e espiritual." },
{ id: 'D', text: "Acreditar sem questionar.", rationale: "Fé envolve convicção ('prova')." }
]
},
{
id: 6,
testament: 'antigo',
question: "Quem foi o homem que 'andou com Deus' e não morreu, pois Deus o levou para junto de si?",
options: [
{ id: 'A', text: "Noé", rationale: "Noé andou com Deus, mas morreu." },
{ id: 'B', text: "Enoque", rationale: "Correto! Gênesis relata que ele desapareceu porque Deus o levou. (Ref: Gênesis 5:24 NVT)", isCorrect: true },
{ id: 'C', text: "Abraão", rationale: "Abraão morreu e foi sepultado." },
{ id: 'D', text: "Elias", rationale: "Elias também foi levado, mas a descrição 'andou com Deus' é clássica de Enoque." }
]
},
{
id: 7,
testament: 'antigo',
question: "Qual profeta foi engolido por um grande peixe após tentar fugir para Társis?",
options: [
{ id: 'A', text: "Jonas", rationale: "Correto! Ele tentava fugir da missão em Nínive. (Ref: Jonas 1:17 NVT)", isCorrect: true },
{ id: 'B', text: "Joel", rationale: "Joel profetizou sobre o Espírito, não foi engolido por peixe." },
{ id: 'C', text: "Amós", rationale: "Amós era pastor de Tekoa." },
{ id: 'D', text: "Daniel", rationale: "Daniel foi para a cova dos leões, não para o mar." }
]
},
{
id: 8,
testament: 'novo',
question: "Onde Jesus realizou seu primeiro sinal milagroso, transformando água em vinho?",
options: [
{ id: 'A', text: "Nazaré", rationale: "Nazaré era onde ele cresceu." },
{ id: 'B', text: "Cafarnaum", rationale: "Cafarnaum foi sua base ministerial, mas não o primeiro milagre." },
{ id: 'C', text: "Caná da Galileia", rationale: "Correto! Foi em um casamento em Caná. (Ref: João 2:11 NVT)", isCorrect: true },
{ id: 'D', text: "Jerusalém", rationale: "Muitos milagres ocorreram lá, mas não o primeiro." }
]
},
{
id: 9,
testament: 'novo',
question: "Em Gálatas, qual é o fruto do Espírito listado logo após o amor?",
options: [
{ id: 'A', text: "Paz", rationale: "Paz vem depois da alegria." },
{ id: 'B', text: "Alegria", rationale: "Correto! A ordem é: amor, alegria, paz... (Ref: Gálatas 5:22 NVT)", isCorrect: true },
{ id: 'C', text: "Paciência", rationale: "Vem depois da paz." },
{ id: 'D', text: "Bondade", rationale: "Está mais adiante na lista." }
]
},
{
id: 10,
testament: 'novo',
question: "No Apocalipse, qual igreja foi chamada de 'morna' (nem fria nem quente)?",
options: [
{ id: 'A', text: "Éfeso", rationale: "Éfeso perdeu o primeiro amor." },
{ id: 'B', text: "Laodiceia", rationale: "Correto! 'Estou a ponto de vomitá-lo da minha boca'. (Ref: Apocalipse 3:16 NVT)", isCorrect: true },
{ id: 'C', text: "Filadélfia", rationale: "Filadélfia foi elogiada." },
{ id: 'D', text: "Sardes", rationale: "Sardes tinha fama de estar viva, mas estava morta." }
]
}
];
const QuizConfigurator = () => {
const [gameState, setGameState] = useState('menu'); // 'menu', 'loading', 'quiz', 'results'
const [config, setConfig] = useState({
testament: 'ambos',
difficulty: 'intermediario',
quantity: 5
});
const [activeQuestions, setActiveQuestions] = useState([]);
const [currentQuestionIndex, setCurrentQuestionIndex] = useState(0);
const [score, setScore] = useState(0);
const [selectedAnswer, setSelectedAnswer] = useState(null);
const [showFeedback, setShowFeedback] = useState(false);
const [history, setHistory] = useState([]);
// Config Handler
const handleConfigChange = (field, value) => {
setConfig(prev => ({ ...prev, [field]: value }));
};
// Start & Filter Logic
const startQuiz = () => {
setGameState('loading');
// Simula tempo de processamento
setTimeout(() => {
let filtered = fullQuestionBank;
// Filtro básico de Testamento
if (config.testament !== 'ambos') {
filtered = fullQuestionBank.filter(q => q.testament === config.testament);
}
// Se o filtro resultar em poucas questões, completamos com outras para não quebrar a experiência
// (Em um app real, buscaríamos mais no DB)
if (filtered.length < config.quantity) {
const remaining = fullQuestionBank.filter(q => !filtered.includes(q));
filtered = [...filtered, ...remaining];
}
// Embaralhar e cortar
const shuffled = [...filtered].sort(() => 0.5 - Math.random());
const finalSelection = shuffled.slice(0, config.quantity);
setActiveQuestions(finalSelection);
setCurrentQuestionIndex(0);
setScore(0);
setHistory([]);
setSelectedAnswer(null);
setShowFeedback(false);
setGameState('quiz');
}, 1500);
};
// Quiz Interaction Handlers
const handleAnswerSelect = (option) => {
if (showFeedback) return;
setSelectedAnswer(option);
setShowFeedback(true);
if (option.isCorrect) {
setScore(prev => prev + 1);
}
setHistory(prev => [...prev, {
question: activeQuestions[currentQuestionIndex],
selected: option,
correct: option.isCorrect
}]);
};
const nextQuestion = () => {
if (currentQuestionIndex < activeQuestions.length - 1) {
setCurrentQuestionIndex(prev => prev + 1);
setSelectedAnswer(null);
setShowFeedback(false);
} else {
setGameState('results');
}
};
const resetQuiz = () => {
setGameState('menu');
};
// Renders
const renderMenu = () => (
0 comments:
Postar um comentário