import { useRouter } from "next/navigation"; import { Play, Repeat2, Trash2 } from "lucide-react"; import { useCurrentLocale, useI18n } from "locales/client"; import { useWorkoutSessionService } from "@/shared/lib/workout-session/use-workout-session.service"; import { useWorkoutSessions } from "@/features/workout-session/model/use-workout-sessions"; import { useWorkoutBuilderStore } from "@/features/workout-builder/model/workout-builder.store"; import { Link } from "@/components/ui/link"; import { Button } from "@/components/ui/button"; const BADGE_COLORS = [ "bg-blue-100 text-blue-700 border-blue-300 dark:bg-blue-900 dark:text-blue-100 dark:border-blue-800", "bg-green-100 text-green-700 border-green-300 dark:bg-green-900 dark:text-green-100 dark:border-green-800", "bg-red-100 text-red-700 border-red-300 dark:bg-red-900 dark:text-red-300 dark:border-red-700", "bg-purple-100 text-purple-700 border-purple-300 dark:bg-purple-900 dark:text-purple-100 dark:border-purple-800", "bg-orange-100 text-orange-700 border-orange-300 dark:bg-orange-900 dark:text-orange-100 dark:border-orange-800", "bg-pink-100 text-pink-700 border-pink-300 dark:bg-pink-900 dark:text-pink-100 dark:border-pink-800", ]; export function WorkoutSessionList() { const locale = useCurrentLocale(); const t = useI18n(); const router = useRouter(); const loadFromSession = useWorkoutBuilderStore((s) => s.loadFromSession); const { remove } = useWorkoutSessionService(); const { data: sessions = [], refetch } = useWorkoutSessions(); const activeSession = sessions.find((s) => s.status === "active"); const handleDelete = async (id: string) => { const confirmed = window.confirm(t("workout_builder.confirm_delete")); if (!confirmed) return; try { await remove(id); refetch(); } catch (error) { console.error("Error deleting session:", error); alert("Error deleting session"); } }; const handleRepeat = (id: string) => { const sessionToCopy = sessions.find((s) => s.id === id); if (!sessionToCopy) return; const allEquipment = Array.from( new Set( sessionToCopy.exercises .flatMap((ex) => ex.attributes?.filter((attr) => attr.attributeName?.name === "EQUIPMENT").map((attr) => attr.attributeValue.value), ) .filter(Boolean), ), ); // Utilise les muscles stockés dans la session, sinon fallback sur les muscles primaires des exercices const allMuscles = sessionToCopy.muscles && sessionToCopy.muscles.length > 0 ? sessionToCopy.muscles : Array.from( new Set( sessionToCopy.exercises .flatMap((ex) => ex.attributes?.filter((attr) => attr.attributeName?.name === "PRIMARY_MUSCLE").map((attr) => attr.attributeValue.value), ) .filter(Boolean), ), ); console.log("allMuscles:", allMuscles); const exercisesByMuscle = allMuscles.map((muscle) => ({ muscle, exercises: sessionToCopy.exercises .filter((ex) => ex.attributes?.some((attr) => attr.attributeName?.name === "PRIMARY_MUSCLE" && attr.attributeValue.value === muscle), ) .map((ex) => ({ ...ex, id: ex.id, workoutSessionId: sessionToCopy.id, exerciseId: ex.id, order: ex.order, })), })); const exercisesOrder = sessionToCopy.exercises.map((ex) => ex.id); // 5. inject in the builder and go step 3 loadFromSession({ equipment: allEquipment, muscles: allMuscles, exercisesByMuscle, exercisesOrder, }); router.push("/?fromSession=1"); }; return (