import { useState, useEffect } from 'react' import { Pencil, Trash2, Check, X } from 'lucide-react' import { api } from '../utils/api' import dayjs from 'dayjs' import 'dayjs/locale/de' dayjs.locale('de') // Quick Mode Presets const PRESETS = [ { id: 'muscle_recovery', icon: 'đȘ', label: 'Kraft-Ruhetag', description: 'Muskelregeneration â Kraft & HIIT pausieren, Cardio erlaubt', color: '#D85A30', config: { focus: 'muscle_recovery', rest_from: ['strength', 'hiit'], allows: ['cardio_low', 'meditation', 'mobility', 'walk'], intensity_max: 60, } }, { id: 'cardio_recovery', icon: 'đ', label: 'Cardio-Ruhetag', description: 'Ausdauererholung â Cardio pausieren, Kraft & Mobility erlaubt', color: '#378ADD', config: { focus: 'cardio_recovery', rest_from: ['cardio', 'cardio_low', 'cardio_high'], allows: ['strength', 'mobility', 'meditation'], intensity_max: 70, } }, { id: 'mental_rest', icon: 'đ§', label: 'Entspannungstag', description: 'Mentale Erholung â Nur Meditation & Spaziergang', color: '#7B68EE', config: { focus: 'mental_rest', rest_from: ['strength', 'cardio', 'hiit', 'power'], allows: ['meditation', 'walk'], intensity_max: 40, } }, { id: 'deload', icon: 'đ', label: 'Deload', description: 'Reduzierte IntensitĂ€t â Alles erlaubt, max 70% Last', color: '#E67E22', config: { focus: 'deload', rest_from: [], allows: ['strength', 'cardio', 'mobility', 'meditation'], intensity_max: 70, } }, ] const FOCUS_LABELS = { muscle_recovery: 'Muskelregeneration', cardio_recovery: 'Cardio-Erholung', mental_rest: 'Mentale Erholung', deload: 'Deload', injury: 'Verletzungspause', } export default function RestDaysPage() { const [restDays, setRestDays] = useState([]) const [showForm, setShowForm] = useState(false) const [formData, setFormData] = useState({ date: dayjs().format('YYYY-MM-DD'), preset: null, note: '', }) const [editing, setEditing] = useState(null) const [saving, setSaving] = useState(false) const [error, setError] = useState(null) const [toast, setToast] = useState(null) useEffect(() => { loadRestDays() }, []) const loadRestDays = async () => { try { const data = await api.listRestDays(90) setRestDays(data) } catch (err) { console.error('Failed to load rest days:', err) setError('Fehler beim Laden der Ruhetage') } } const showToast = (message, duration = 2000) => { setToast(message) setTimeout(() => setToast(null), duration) } const handlePresetSelect = (preset) => { setFormData(f => ({ ...f, preset: preset.id })) } const handleSave = async () => { if (!formData.preset) { setError('Bitte wĂ€hle einen Ruhetag-Typ') return } setSaving(true) setError(null) try { const preset = PRESETS.find(p => p.id === formData.preset) await api.createRestDay({ date: formData.date, rest_config: preset.config, note: formData.note, }) showToast('â Ruhetag gespeichert') await loadRestDays() setShowForm(false) setFormData({ date: dayjs().format('YYYY-MM-DD'), preset: null, note: '', }) } catch (err) { console.error('Save failed:', err) setError(err.message || 'Fehler beim Speichern') } finally { setSaving(false) } } const handleDelete = async (id) => { if (!confirm('Ruhetag löschen?')) return try { await api.deleteRestDay(id) showToast('â Gelöscht') await loadRestDays() } catch (err) { console.error('Delete failed:', err) setError(err.message || 'Fehler beim Löschen') } } const startEdit = (day) => { setEditing({ ...day, note: day.note || '', }) } const cancelEdit = () => { setEditing(null) } const handleUpdate = async () => { try { await api.updateRestDay(editing.id, { note: editing.note, }) showToast('â Aktualisiert') setEditing(null) await loadRestDays() } catch (err) { console.error('Update failed:', err) setError(err.message || 'Fehler beim Aktualisieren') } } return (
Noch keine Ruhetage erfasst.
)} {restDays.map(day => { const isEditing = editing?.id === day.id const focus = day.rest_config?.focus || 'mental_rest' const preset = PRESETS.find(p => p.id === focus) const isToday = day.date === dayjs().format('YYYY-MM-DD') return ("{day.note}"
)} {/* Details (collapsible, optional for later) */} {day.rest_config && (