import React, { useState, useEffect } from "react"; import { useRouter } from "next/navigation"; import { ChevronLeft, Layers } from "lucide-react"; import { useTimer } from "@/context/TimerContext"; import styles from "@/css/Header.module.css"; import { useExam } from "@/context/ExamContext"; import { Avatar, AvatarFallback } from "@/components/ui/avatar"; import { useModal } from "@/context/ModalContext"; import { API_URL, getToken } from "@/lib/auth"; import { UserData } from "@/types/auth"; interface HeaderProps { displayUser?: boolean; displaySubject?: string; displayTabTitle: string; examDuration?: string; } const Header = ({ displayUser, displaySubject, displayTabTitle, examDuration, }: HeaderProps) => { const router = useRouter(); const { open } = useModal(); const { clearExam } = useExam(); const [totalSeconds, setTotalSeconds] = useState( examDuration ? parseInt(examDuration) * 60 : 0 ); const { timeRemaining, stopTimer } = useTimer(); const [userData, setUserData] = useState(); 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 && (
{userData?.name ? userData.name.charAt(0).toUpperCase() : ""} 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;