"use client"; import { useRouter, useSearchParams } from "next/navigation"; import { ArrowLeft, LocateIcon } from "lucide-react"; import { useEffect } from "react"; // Types interface Question { question: string; options: Record; correctAnswer: string; userAnswer: string | null; isCorrect: boolean; solution: string; } interface ResultSheet { score: number; questions: Question[]; } const ResultsPage = () => { const router = useRouter(); const searchParams = useSearchParams(); const answersParam = searchParams.get("answers"); if (!answersParam) { return (

No results found

); } const resultSheet: ResultSheet = JSON.parse(decodeURIComponent(answersParam)); const getScoreMessage = (score: number) => { if (score < 30) return "Try harder!"; if (score < 70) return "Getting Better"; return "You did great!"; }; const getStatusColor = (question: Question) => { if (question.userAnswer === null) return "bg-yellow-500"; return question.isCorrect ? "bg-green-500" : "bg-red-500"; }; const getStatusText = (question: Question) => { if (question.userAnswer === null) return "Skipped"; return question.isCorrect ? "Correct" : "Incorrect"; }; const getOptionClassName = (key: string, question: Question): string => { const isCorrectAnswer = key === question.correctAnswer; const isUserAnswer = key === question.userAnswer; const isCorrectAndUserAnswer = isCorrectAnswer && isUserAnswer; const isUserAnswerWrong = isUserAnswer && !isCorrectAnswer; if (isCorrectAndUserAnswer) { return "bg-blue-900 text-white border-blue-900"; } else if (isCorrectAnswer) { return "bg-green-500 text-white border-green-500"; } else if (isUserAnswerWrong) { return "bg-red-500 text-white border-red-500"; } return "border-gray-300"; }; // Handle browser back button useEffect(() => { const handlePopState = () => { router.push("/unit"); }; window.addEventListener("popstate", handlePopState); return () => window.removeEventListener("popstate", handlePopState); }, [router]); return (
{/* Header */}
{/* Main Content */}
{/* Score Message */}

{getScoreMessage(resultSheet.score)}

{/* Score Card */}

Score:

{resultSheet.score}
{/* Solutions Section */}

Solutions

{resultSheet.questions.map((question, idx) => (
{/* Question Header */}

{idx + 1}. {question.question}

{getStatusText(question)}
{/* Options */}
{Object.entries(question.options).map(([key, option]) => (
{key.toUpperCase()} {option}
))}
{/* Solution Divider */}
{/* Solution */}

Solution:

{question.solution}

))}
{/* Bottom Button */}
{/* Spacer for fixed button */}
); }; export default ResultsPage;