import { useState } from "react"; import { useParams, useNavigate } from "react-router-dom"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Progress } from "@/components/ui/progress"; import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group"; import { Label } from "@/components/ui/label"; import { Badge } from "@/components/ui/badge"; import { Loader2, CheckCircle2, ArrowRight, Clock } from "lucide-react"; import { useStartDiagnostic, useAnswerDiagnostic } from "@/hooks/queries"; import { useToast } from "@/hooks/use-toast"; import type { DiagnosticQuestion } from "@/types"; export default function DiagnosticTest() { const { subjectId } = useParams<{ subjectId: string }>(); const navigate = useNavigate(); const { toast } = useToast(); const startMutation = useStartDiagnostic(); const answerMutation = useAnswerDiagnostic(); const [sessionId, setSessionId] = useState(null); const [currentQuestion, setCurrentQuestion] = useState(null); const [selectedAnswer, setSelectedAnswer] = useState(""); const [questionIndex, setQuestionIndex] = useState(0); const [totalQuestions, setTotalQuestions] = useState(0); const [completed, setCompleted] = useState(false); const handleStart = () => { startMutation.mutate(Number(subjectId), { onSuccess: (data) => { setSessionId(data.session.id); setCurrentQuestion(data.first_question); setTotalQuestions(data.session.total_questions); setQuestionIndex(1); }, onError: () => toast({ title: "Error", description: "Failed to start diagnostic", variant: "destructive" }), }); }; const handleAnswer = () => { if (!sessionId || !currentQuestion || !selectedAnswer) return; answerMutation.mutate( { session_id: sessionId, question_id: currentQuestion.id, answer: selectedAnswer }, { onSuccess: (data) => { setSelectedAnswer(""); if (data.completed) { setCompleted(true); } else if (data.next_question) { setCurrentQuestion(data.next_question); setQuestionIndex((i) => i + 1); } }, onError: () => toast({ title: "Error", description: "Failed to submit answer", variant: "destructive" }), } ); }; if (completed) { return (

Diagnostic Complete!

Your proficiency profile has been generated.

); } if (!sessionId) { return (

Diagnostic Assessment

This adaptive test will assess your current knowledge across all topics. Questions adapt to your performance in real time.

); } return (
Question {questionIndex} of ~{totalQuestions} {currentQuestion?.difficulty}
{currentQuestion && (
{currentQuestion.domain_name} ยท {currentQuestion.topic_name}
{currentQuestion.question_text}
{currentQuestion.options && ( {currentQuestion.options.map((opt, i) => (
))}
)}
)}
); }