import React, { useState, useEffect } from 'react'; import { CheckCircle, Plus, Pencil, Trash2, X, Save } from 'lucide-react'; import { Language, WorkoutSet } from '../../types'; import { t } from '../../services/i18n'; import ExerciseModal from '../ExerciseModal'; import { useTracker } from './useTracker'; import SetLogger from './SetLogger'; interface SporadicViewProps { tracker: ReturnType; lang: Language; } const SporadicView: React.FC = ({ tracker, lang }) => { const { handleLogSporadicSet, setIsSporadicMode, isCreating, setIsCreating, handleCreateExercise, exercises, resetForm, quickLogSession, selectedExercise, loadQuickLogSession } = tracker; const [todaysSets, setTodaysSets] = useState([]); const [editingSetId, setEditingSetId] = useState(null); const [editingSet, setEditingSet] = useState(null); const [deletingSetId, setDeletingSetId] = useState(null); useEffect(() => { if (quickLogSession && quickLogSession.sets) { // Sets are already ordered by timestamp desc in the backend query, but let's ensure setTodaysSets([...quickLogSession.sets].sort((a, b) => b.timestamp - a.timestamp)); } else { setTodaysSets([]); } }, [quickLogSession]); const renderSetMetrics = (set: WorkoutSet) => { const metrics: string[] = []; if (set.weight) metrics.push(`${set.weight} ${t('weight_kg', lang)}`); if (set.reps) metrics.push(`${set.reps} ${t('reps', lang)}`); if (set.durationSeconds) metrics.push(`${set.durationSeconds} ${t('time_sec', lang)}`); if (set.distanceMeters) metrics.push(`${set.distanceMeters} ${t('dist_m', lang)}`); if (set.height) metrics.push(`${set.height} ${t('height_cm', lang)}`); return metrics.join(' / '); }; return (

{t('quick_log', lang)}

{/* History Section */} {todaysSets.length > 0 && (

{t('history_section', lang)}

{todaysSets.map((set, idx) => (
{todaysSets.length - idx}

{set.exerciseName}{set.side && {t(set.side.toLowerCase() as any, lang)}}

{renderSetMetrics(set)}

))}
)}
{isCreating && ( setIsCreating(false)} onSave={handleCreateExercise} lang={lang} existingExercises={exercises} /> )} {/* Edit Set Modal */} {editingSetId && editingSet && (

{t('edit', lang)}

{(editingSet.type === 'STRENGTH' || editingSet.type === 'BODYWEIGHT') && ( <>
setEditingSet({ ...editingSet, weight: parseFloat(e.target.value) || 0 })} className="w-full mt-1 px-4 py-2 bg-surface-container-high text-on-surface rounded-lg focus:outline-none focus:ring-2 focus:ring-primary" />
setEditingSet({ ...editingSet, reps: parseInt(e.target.value) || 0 })} className="w-full mt-1 px-4 py-2 bg-surface-container-high text-on-surface rounded-lg focus:outline-none focus:ring-2 focus:ring-primary" />
)} {(editingSet.type === 'CARDIO' || editingSet.type === 'STATIC') && (
setEditingSet({ ...editingSet, durationSeconds: parseInt(e.target.value) || 0 })} className="w-full mt-1 px-4 py-2 bg-surface-container-high text-on-surface rounded-lg focus:outline-none focus:ring-2 focus:ring-primary" />
)} {editingSet.type === 'CARDIO' && (
setEditingSet({ ...editingSet, distanceMeters: parseFloat(e.target.value) || 0 })} className="w-full mt-1 px-4 py-2 bg-surface-container-high text-on-surface rounded-lg focus:outline-none focus:ring-2 focus:ring-primary" />
)}
)} {/* Delete Confirmation Modal */} {deletingSetId && (

{t('delete', lang)}

{t('delete_confirm', lang)}

)}
); }; export default SporadicView;