Arquivos
Categorias
import React, { useState } from 'react';
import { toast } from "@/hooks/use-toast";
import CoverPage from '../components/CoverPage';
import TestQuestions from '../components/TestQuestions';
import ResultPage from '../components/ResultPage';
import { questions, creativityLevels } from '../data/creativityData';
import { useCreativityTest } from '../hooks/useCreativityTest';
const Index = () => {
const [showCover, setShowCover] = useState(true);
const [userName, setUserName] = useState("");
const [userEmail, setUserEmail] = useState("");
const [currentQuestion, setCurrentQuestion] = useState(0);
const [answers, setAnswers] = useState<{
[key: number]: number;
}>({});
const [showResult, setShowResult] = useState(false);
const { sendCreativityResult, isLoading } = useCreativityTest();
const totalScore = Object.values(answers).reduce((sum, score) => sum + score, 0);
const getCurrentLevel = () => {
return creativityLevels.find(level => totalScore >= level.range[0] && totalScore <= level.range[1]) || creativityLevels[0];
};
const handleStartTest = (e: React.FormEvent) => {
e.preventDefault();
if (!userName.trim()) {
toast({
title: "Nome obrigatório",
description: "Por favor, insira seu nome para continuar.",
variant: "destructive"
});
return;
}
if (!userEmail.trim()) {
toast({
title: "Email obrigatório",
description: "Por favor, insira seu email para continuar.",
variant: "destructive"
});
return;
}
console.log("Iniciando teste para:", userName, userEmail);
setShowCover(false);
};
const handleAnswer = (score: number) => {
const newAnswers = {
...answers,
[questions[currentQuestion].id]: score
};
setAnswers(newAnswers);
if (currentQuestion < questions.length - 1) {
setCurrentQuestion(currentQuestion + 1);
} else {
setShowResult(true);
}
};
const handleSendResult = async () => {
const currentLevel = getCurrentLevel();
console.log("Enviando resultado para:", userName, userEmail);
console.log("Nível de criatividade:", currentLevel.name);
console.log("Pontuação total:", totalScore);
const success = await sendCreativityResult(
userName,
userEmail,
totalScore,
currentLevel,
answers
);
};
const handleNewTest = () => {
setShowCover(true);
setCurrentQuestion(0);
setAnswers({});
setShowResult(false);
setUserName("");
setUserEmail("");
};
if (showCover) {
return (
<CoverPage
userName={userName}
userEmail={userEmail}
onNameChange={setUserName}
onEmailChange={setUserEmail}
onStartTest={handleStartTest}
/>
);
}
if (showResult) {
return (
<ResultPage
userName={userName}
userEmail={userEmail}
totalScore={totalScore}
currentLevel={getCurrentLevel()}
onSendResult={handleSendResult}
onNewTest={handleNewTest}
isLoading={isLoading}
/>
);
}
return (
<TestQuestions
userName={userName}
userEmail={userEmail}
currentQuestion={currentQuestion}
questions={questions}
onAnswer={handleAnswer}
/>
);
};
export default Index;
Estou a disposição para conversar sobre oportunidades profissionais e/ou alguma necessidade artística ligada a fotografia.