import React, { useMemo } from 'react'; import { WorkoutSession, ExerciseType, Language } from '../types'; import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, BarChart, Bar } from 'recharts'; import { t } from '../services/i18n'; interface StatsProps { sessions: WorkoutSession[]; lang: Language; } const Stats: React.FC = ({ sessions, lang }) => { const volumeData = useMemo(() => { const data = [...sessions].reverse().map(session => { const sessionWeight = session.userBodyWeight || 70; const work = session.sets.reduce((acc, set) => { let setWork = 0; const reps = set.reps || 0; const weight = set.weight || 0; if (set.type === ExerciseType.STRENGTH) { setWork = weight * reps; } else if (set.type === ExerciseType.BODYWEIGHT) { const percentage = set.bodyWeightPercentage || 100; const effectiveBw = sessionWeight * (percentage / 100); setWork = (effectiveBw + weight) * reps; } else if (set.type === ExerciseType.STATIC) { setWork = 0; } return acc + Math.max(0, setWork); }, 0); return { date: new Date(session.startTime).toLocaleDateString(lang === 'ru' ? 'ru-RU' : 'en-US', { day: 'numeric', month: 'short' }), work: Math.round(work) }; }).filter(d => d.work > 0); return data; }, [sessions, lang]); const setsData = useMemo(() => { return [...sessions].reverse().map(session => ({ date: new Date(session.startTime).toLocaleDateString(lang === 'ru' ? 'ru-RU' : 'en-US', { day: 'numeric', month: 'short' }), sets: session.sets.length })); }, [sessions, lang]); const weightData = useMemo(() => { return [...sessions].reverse() .filter(s => s.userBodyWeight) .map(session => ({ date: new Date(session.startTime).toLocaleDateString(lang === 'ru' ? 'ru-RU' : 'en-US', { day: 'numeric', month: 'short' }), weight: session.userBodyWeight })); }, [sessions, lang]); if (sessions.length < 2) { return (

{t('not_enough_data', lang)}

) } return (

{t('progress', lang)}

{/* Volume Chart */}

{t('volume_title', lang)}

{t('volume_subtitle', lang)}

`${(val/1000).toFixed(1)}k`} /> [`${val.toLocaleString()} kg`, t('volume_title', lang)]} />
{/* Sets Chart */}

{t('sets_title', lang)}

{/* Body Weight Chart */}

{t('weight_title', lang)}

[`${val} kg`, t('weight_kg', lang)]} />
); }; export default Stats;