import { useState, useEffect } from 'react' import { useAuth } from '../context/AuthContext' import { Icon, getActivityIconName } from '../components/Icons' import Logo from '../components/Logo' const API_URL = '/api' // Coach greetings based on context const getCoachGreeting = (user, todayWorkout) => { const hour = new Date().getHours() const name = user?.name?.split(' ')[0] || 'du' if (todayWorkout) { // There's a workout today if (hour < 10) { return `Godmorgon ${name}! Idag kör vi ${todayWorkout.name.toLowerCase()}. Redo?` } else if (hour < 14) { return `${todayWorkout.name} står på schemat idag. Dags att köra!` } else if (hour < 18) { return `Eftermiddagspass? ${todayWorkout.name} väntar på dig.` } else { return `Kvällspass ${name}? ${todayWorkout.name} – perfekt för att avsluta dagen.` } } else { // Rest day if (hour < 10) { return `Godmorgon ${name}! Vilodag idag – perfekt för återhämtning.` } else if (hour < 14) { return `Ingen träning schemalagd. Ta en promenad eller stretcha lite?` } else if (hour < 18) { return `Vila är också träning! Lätt rörelse eller mobilitet idag?` } else { return `Lugn kväll ${name}. Ladda batterierna till nästa pass!` } } } // Rest day tips const restDayTips = [ { iconName: 'walking', text: 'Promenad' }, { iconName: 'yoga', text: 'Stretching' }, { iconName: 'swimming', text: 'Simning' }, { iconName: 'cycling', text: 'Cykling' }, ] // Get weekday names const weekdays = ['Mån', 'Tis', 'Ons', 'Tor', 'Fre', 'Lör', 'Sön'] function Dashboard({ onStartWorkout, onNavigate }) { const { user, logout } = useAuth() const [program, setProgram] = useState(null) const [todayWorkout, setTodayWorkout] = useState(null) const [loading, setLoading] = useState(true) const [currentWeekStart, setCurrentWeekStart] = useState(getWeekStart(new Date())) useEffect(() => { fetchData() }, []) const fetchData = async () => { try { const res = await fetch(`${API_URL}/programs/1`) const data = await res.json() setProgram(data) // Determine today's workout based on day of week const dayOfWeek = new Date().getDay() const adjustedDay = dayOfWeek === 0 ? 7 : dayOfWeek const todayDay = data.days?.find(d => d.day_number === adjustedDay) setTodayWorkout(todayDay || null) setLoading(false) } catch (err) { console.error('Failed to fetch data:', err) setLoading(false) } } if (loading) { return (

Laddar...

) } const workoutDays = program?.days?.map(d => d.day_number) || [] return (

Gravl

{/* Week Calendar - TOP */}
{formatWeekRange(currentWeekStart)}
{weekdays.map((name, idx) => { const date = addDays(currentWeekStart, idx) const dayNum = idx + 1 const isToday = isSameDay(date, new Date()) const hasWorkout = workoutDays.includes(dayNum) const workout = program?.days?.find(d => d.day_number === dayNum) return (
hasWorkout && workout && onStartWorkout(workout)} > {name} {date.getDate()} {hasWorkout && }
) })}
{/* Coach Section with Today's Action */}

{getCoachGreeting(user, todayWorkout)}

{/* Today's Action */}
{todayWorkout ? ( // Workout today - show workout card
onStartWorkout(todayWorkout)}>

{todayWorkout.name}

{todayWorkout.exercises?.filter(e => e.name).length} övningar • ~45 min
) : ( // Rest day - show tips + add button
{restDayTips.map((tip, i) => ( {tip.text} ))}
)}
{/* Quick Stats */}
{workoutDays.length} Pass/vecka
2 Denna vecka
Streak: 5
) } // Helper functions function getWeekStart(date) { const d = new Date(date) const day = d.getDay() const diff = d.getDate() - day + (day === 0 ? -6 : 1) return new Date(d.setDate(diff)) } function addDays(date, days) { const d = new Date(date) d.setDate(d.getDate() + days) return d } function isSameDay(d1, d2) { return d1.getDate() === d2.getDate() && d1.getMonth() === d2.getMonth() && d1.getFullYear() === d2.getFullYear() } function formatWeekRange(weekStart) { const end = addDays(weekStart, 6) const startMonth = weekStart.toLocaleDateString('sv-SE', { month: 'short' }) const endMonth = end.toLocaleDateString('sv-SE', { month: 'short' }) if (startMonth === endMonth) { return `${weekStart.getDate()} - ${end.getDate()} ${startMonth}` } return `${weekStart.getDate()} ${startMonth} - ${end.getDate()} ${endMonth}` } export default Dashboard