import { useEffect, useState } from "react"; import { Tabs, TabsTrigger, TabsList, TabsContent, } from "../../components/ui/tabs"; import { useAuthStore } from "../../stores/authStore"; import { CheckCircle, Search } from "lucide-react"; import { api } from "../../utils/api"; import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, } from "../../components/ui/card"; import { Badge } from "../../components/ui/badge"; import { Button } from "../../components/ui/button"; import type { PracticeSheet } from "../../types/sheet"; import { formatStatus } from "../../lib/utils"; import { useNavigate } from "react-router-dom"; import { SearchOverlay } from "../../components/SearchOverlay"; export const Home = () => { const user = useAuthStore((state) => state.user); const navigate = useNavigate(); const [practiceSheets, setPracticeSheets] = useState([]); const [notStartedSheets, setNotStartedSheets] = useState([]); const [inProgressSheets, setInProgressSheets] = useState([]); const [completedSheets, setCompletedSheets] = useState([]); const [isSearchOpen, setIsSearchOpen] = useState(false); const [searchQuery, setSearchQuery] = useState(""); useEffect(() => { const sortPracticeSheets = (sheets: PracticeSheet[]) => { const notStarted = sheets.filter( (sheet) => sheet.user_status === "NOT_STARTED", ); const inProgress = sheets.filter( (sheet) => sheet.user_status === "IN_PROGRESS", ); const completed = sheets.filter( (sheet) => sheet.user_status === "COMPLETED", ); setNotStartedSheets(notStarted); setInProgressSheets(inProgress); setCompletedSheets(completed); }; const fetchPracticeSheets = async () => { if (!user) return; try { const authStorage = localStorage.getItem("auth-storage"); if (!authStorage) { console.error("authStorage not found in local storage"); return; } const { state: { token }, } = JSON.parse(authStorage); if (!token) { console.error("Token not found in authStorage"); return; } const sheets = await api.getPracticeSheets(token, 1, 10); setPracticeSheets(sheets.data); sortPracticeSheets(sheets.data); } catch (error) { console.error("Error fetching practice sheets:", error); } }; fetchPracticeSheets(); }, [user]); const handleStartPracticeSheet = (sheetId: string) => { navigate(`/student/practice/${sheetId}`); }; return (

Welcome, {user?.name || "Student"}

What are you looking for?

setIsSearchOpen(true)} placeholder="Search practice sheets..." readOnly className="font-satoshi w-full pl-10 pr-4 py-3 border border-gray-300 rounded-2xl shadow-sm cursor-pointer" />

Pick up where you left off

{inProgressSheets.length > 0 ? ( inProgressSheets.map((sheet) => ( {sheet?.title} {sheet?.description}

{formatStatus(sheet?.user_status)}

{sheet?.modules_count} modules

{sheet?.time_limit} minutes

)) ) : (

You don't have any practice sheets in progress. Why not start one?

)}
All Not Started Completed
{practiceSheets.length > 0 ? ( practiceSheets.map((sheet) => ( {sheet?.title} {sheet?.description}

{formatStatus(sheet?.user_status)}

{sheet?.modules_count} modules

{sheet?.time_limit} minutes

)) ) : (

No Practice Sheets available.

)}
{notStartedSheets.map((sheet) => ( {sheet?.title} {sheet?.description}

Not Started

{sheet?.modules_count} modules

{sheet?.time_limit} minutes

))}
{completedSheets.length > 0 ? ( completedSheets.map((sheet) => ( {sheet?.title} {sheet?.description}

{formatStatus(sheet?.user_status)}

{sheet?.modules_count} modules

{sheet?.time_limit} minutes

)) ) : (

You have not completed any practice sheets.

)}

SAT Preparation Tips

Practice regularly with official SAT materials

Review your mistakes and learn from them

Focus on your weak areas

Take full-length practice tests

Get plenty of rest before the test day

{isSearchOpen && ( { setIsSearchOpen(false); setSearchQuery(""); }} searchQuery={searchQuery} setSearchQuery={setSearchQuery} /> )}
); };