"use client"; import React, { useEffect, useState } from "react"; import { usePathname, useRouter, useSearchParams } from "next/navigation"; import Header from "@/components/Header"; import QuestionItem from "@/components/QuestionItem"; import BackgroundWrapper from "@/components/BackgroundWrapper"; import { useExamStore } from "@/stores/examStore"; import { useTimerStore } from "@/stores/timerStore"; export default function ExamPage() { const router = useRouter(); const pathname = usePathname(); const searchParams = useSearchParams(); const test_id = searchParams.get("test_id") || ""; const type = searchParams.get("type") || ""; const { setStatus, test, answers, startExam, setAnswer, submitExam } = useExamStore(); const { resetTimer, stopTimer } = useTimerStore(); const [isSubmitting, setIsSubmitting] = useState(false); // Start exam + timer automatically useEffect(() => { if (type && test_id) { startExam(type, test_id).then((fetchedTest) => { if (fetchedTest?.metadata.time_limit_minutes) { setStatus("in-progress"); // ✅ make sure exam status is set here resetTimer(fetchedTest.metadata.time_limit_minutes * 60, () => { // Timer ended → auto-submit setStatus("finished"); stopTimer(); submitExam(type); router.replace(`/exam/results`); }); } }); } }, [ type, test_id, startExam, resetTimer, submitExam, router, setStatus, stopTimer, ]); // useEffect(() => { // const handlePopState = (event: PopStateEvent) => { // if (status === "in-progress") { // const confirmExit = window.confirm( // "Are you sure you want to quit the exam?" // ); // if (confirmExit) { // setStatus("finished"); // stopTimer(); // cancelExam(); // router.replace(`/categories/${type}s`); // } else { // // User canceled → push them back to current page // router.replace(pathname, { scroll: false }); // } // } else { // router.replace(`/categories/${type}s`); // } // }; // window.addEventListener("popstate", handlePopState); // return () => window.removeEventListener("popstate", handlePopState); // }, [status, router, pathname, type, setStatus, stopTimer, cancelExam]); if (!test) { return (

Loading exam...

); } const handleSubmitExam = async (type: string) => { try { setStatus("finished"); // ✅ mark exam finished stopTimer(); setIsSubmitting(true); await submitExam(type); router.replace(`/exam/results`); // ✅ replace to prevent back nav } finally { setIsSubmitting(false); } }; return (
{/* Header with live timer */}
{/* Questions */}
{test.questions.map((q, idx) => (
setAnswer(idx, answer)} />
))} {/* Bottom submit bar */}
); } function cancelExam() { throw new Error("Function not implemented."); }