"use client" import { useEffect, useState } from "react" import { Button } from "@/components/ui/button" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Trophy, Calendar } from "lucide-react" import Link from "next/link" import { BadgeList } from "@/components/profile/badge-list" import { getApiUrl } from "@/lib/api-config" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" import { UserAttendanceList } from "@/components/profile/user-attendance-list" import { UserReviewsList } from "@/components/profile/user-reviews-list" import { UserGroupsList } from "@/components/profile/user-groups-list" // Types interface UserProfile { id: number email: string username: string // Assuming we add this to UserRead or fetch separately } interface UserBadge { id: number badge: { id: number name: string description: string icon: string slug: string } awarded_at: string } export default function ProfilePage() { const [user, setUser] = useState(null) const [badges, setBadges] = useState([]) const [loading, setLoading] = useState(true) const [stats, setStats] = useState({ attendance_count: 0, review_count: 0, group_count: 0 }) useEffect(() => { const token = localStorage.getItem("token") if (!token) { setLoading(false) return } // Fetch User Data fetch(`${getApiUrl()}/auth/users/me`, { headers: { Authorization: `Bearer ${token}` } }) .then(res => { if (res.ok) return res.json() throw new Error("Failed to fetch user") }) .then(data => { setUser(data) // Fetch Badges fetch(`${getApiUrl()}/badges/me`, { headers: { Authorization: `Bearer ${token}` } }) .then(res => res.ok ? res.json() : []) .then(data => setBadges(data)) // Fetch Stats fetch(`${getApiUrl()}/users/${data.id}/stats`, { headers: { Authorization: `Bearer ${token}` } }) .then(res => res.ok ? res.json() : { attendance_count: 0, review_count: 0, group_count: 0 }) .then((statsData: { attendance_count: number; review_count: number; group_count: number }) => setStats(statsData)) }) .catch(err => console.error(err)) .finally(() => setLoading(false)) }, []) if (loading) { return
Loading profile...
} if (!user) { return (

Please Log In

) } // Transform badges for the list component const displayBadges = badges.map(b => b.badge) return (

{user.email}

Member

Overview Attendance Reviews Groups
Shows Attended
{stats.attendance_count}
Reviews Written
{stats.review_count}
Groups Joined
{stats.group_count}
Badges
) }