import React, { useState, useEffect } from "react"; import { useRouter } from "next/navigation"; import Image from "next/image"; import { ChevronLeft, Layers } from "lucide-react"; import { useTimer } from "@/context/TimerContext"; import styles from "@/css/Header.module.css"; import { useExam } from "@/context/ExamContext"; const API_URL = "https://examjam-api.pptx704.com"; // You'll need to implement getToken for Next.js - could use cookies, localStorage, etc. const getToken = async () => { if (typeof window === "undefined") { return null; } // Extract authToken from cookies const match = document.cookie.match(/(?:^|;\s*)authToken=([^;]*)/); return match ? decodeURIComponent(match[1]) : null; }; const Header = ({ image, displayUser, displaySubject, displayTabTitle, examDuration, }) => { const router = useRouter(); const { clearExam } = useExam(); const [totalSeconds, setTotalSeconds] = useState( examDuration ? parseInt(examDuration) * 60 : 0 ); const { timeRemaining, stopTimer } = useTimer(); const [userData, setUserData] = useState(null); useEffect(() => { if (!examDuration) return; const timer = setInterval(() => { setTotalSeconds((prev) => { if (prev <= 0) { clearInterval(timer); return 0; } return prev - 1; }); }, 1000); return () => clearInterval(timer); }, [examDuration]); useEffect(() => { async function fetchUser() { try { const token = await getToken(); if (!token) return; const response = await fetch(`${API_URL}/me`, { method: "GET", headers: { Authorization: `Bearer ${token}`, }, }); if (response.ok) { const fetchedUserData = await response.json(); setUserData(fetchedUserData); } } catch (error) { console.error("Error fetching user data:", error); } } if (displayUser) { fetchUser(); } }, [displayUser]); const hours = Math.floor(totalSeconds / 3600); const minutes = Math.floor((totalSeconds % 3600) / 60); const seconds = totalSeconds % 60; const showExitDialog = () => { const confirmed = window.confirm("Are you sure you want to quit the exam?"); if (confirmed) { if (stopTimer) { stopTimer(); } clearExam(); router.push("/unit"); } }; const handleBackClick = () => { router.back(); }; return (
{displayUser && (
{image && ( Profile )} Hello {userData?.name ? userData.name.split(" ")[0] : ""}
)} {displaySubject && (
{displaySubject}
)} {displayTabTitle && (
{displayTabTitle}
)} {examDuration && (
{String(hours).padStart(2, "0")} Hrs
{String(minutes).padStart(2, "0")} Mins
{String(seconds).padStart(2, "0")} Secs
)}
); }; export default Header;