"use client"; import { useEffect, useState } from "react"; import { AuthGuard } from "@/components/auth/AuthGuard"; import { Navbar } from "@/components/layout/Navbar"; import { BottomNav } from "@/components/layout/BottomNav"; import { Card } from "@/components/ui/Card"; import { Badge } from "@/components/ui/Badge"; import { Spinner } from "@/components/ui/Spinner"; import { api } from "@/lib/api"; import { DIFFICULTY_LABELS } from "@/lib/types"; import type { CompletedWorkout } from "@/lib/types"; function formatDuration(seconds: number | null): string { if (!seconds) return "N/A"; const hours = Math.floor(seconds / 3600); const mins = Math.round((seconds % 3600) / 60); if (hours > 0) { return mins > 0 ? `${hours}h ${mins}m` : `${hours}h`; } return `${mins}m`; } function formatTotalHours(seconds: number): string { const hours = (seconds / 3600).toFixed(1); return `${hours}h`; } function formatDate(dateStr: string): string { const date = new Date(dateStr); return date.toLocaleDateString("en-US", { weekday: "short", month: "short", day: "numeric", year: "numeric", }); } function getDifficultyVariant( difficulty: number ): "default" | "success" | "warning" | "error" | "accent" { if (difficulty <= 1) return "success"; if (difficulty <= 3) return "warning"; return "error"; } export default function HistoryPage() { const [workouts, setWorkouts] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { api .getCompletedWorkouts() .then((data) => { const sorted = [...data].sort( (a, b) => new Date(b.workout_start_time).getTime() - new Date(a.workout_start_time).getTime() ); setWorkouts(sorted); }) .catch((err) => console.error("Failed to fetch completed workouts:", err) ) .finally(() => setLoading(false)); }, []); const totalWorkouts = workouts.length; const totalTime = workouts.reduce((sum, w) => sum + (w.total_time || 0), 0); const avgDifficulty = totalWorkouts > 0 ? workouts.reduce((sum, w) => sum + w.difficulty, 0) / totalWorkouts : 0; return (

History

{loading ? (
) : workouts.length === 0 ? (

No completed workouts yet.

) : (
{/* Summary Stats */}

{totalWorkouts}

Total Workouts

{avgDifficulty.toFixed(1)}

Avg Difficulty

{formatTotalHours(totalTime)}

Total Time

{/* Workout List */}
{workouts.map((cw) => (

{cw.workout.name}

{formatDate(cw.workout_start_time)}

{DIFFICULTY_LABELS[cw.difficulty] || "N/A"}
{formatDuration(cw.total_time)} {cw.workout.exercise_count > 0 && ( {cw.workout.exercise_count} exercise {cw.workout.exercise_count !== 1 ? "s" : ""} )}
{cw.notes && (

{cw.notes}

)}
))}
)}
); }