"use client"; import { useEffect, useState } from "react"; import { useRouter } from "next/navigation"; import DarkThemeLayout from "./components/DarkThemeLayout"; import Navbar from "./components/Navbar"; import PointsDisplay from "./components/PointsDisplay"; import DailyCheckinButton from "./components/DailyCheckinButton"; import TaskList from "./components/TaskList"; import BadgeCard from "./components/BadgeCard"; interface User { id: string; username: string; email: string; points: number; rank: number; badgeCount: number; streak: number; hasCheckedInToday: boolean; } export default function DashboardPage() { const router = useRouter(); const [user, setUser] = useState(null); const [loading, setLoading] = useState(true); useEffect(() => { const token = localStorage.getItem("token"); if (!token) { router.push("/login"); return; } fetchUserData(); }, [router]); const fetchUserData = async () => { try { const token = localStorage.getItem("token"); const response = await fetch("/api/users/me", { headers: { Authorization: `Bearer ${token}`, }, }); if (!response.ok) { throw new Error("Failed to fetch user data"); } const data = await response.json(); if (data.success && data.data) { setUser({ id: data.data.id, username: data.data.name, email: data.data.email, points: data.data.pointsBalance || 0, rank: 0, badgeCount: data.data.badgesCount || 0, streak: 0, hasCheckedInToday: false, }); } else { throw new Error("Invalid response"); } } catch (error) { console.error("Error fetching user data:", error); localStorage.removeItem("token"); router.push("/login"); } finally { setLoading(false); } }; const handleCheckin = async () => { try { const response = await fetch("/api/checkin", { method: "POST", }); const data = await response.json(); if (data.success) { setUser(prev => prev ? { ...prev, points: prev.points + data.points, streak: data.streak, hasCheckedInToday: true } : null); return data; } throw new Error("Check-in failed"); } catch (error) { console.error("Check-in error:", error); return { success: false, points: 0, streak: 0 }; } }; if (loading) { return (
); } if (!user) { return null; } return ( <>

Welcome back, {user.username}!

Ready to earn more points today?

Available Tasks

View All →

Quick Stats

Global Rank
#{user.rank}
Badges Earned
{user.badgeCount}
Current Streak
{user.streak} days
); }