import { state } from '../state.js'; import { renderExercise } from './exercise-card.js'; import { renderCardioItem } from './cardio-card.js'; import { formatDate } from '../utils.js'; export function renderWorkoutCard(w) { const isActive = !w.endTime; const isExpanded = state.expandedWorkoutId === w.id; const isReadOnly = w.synced && w.endTime; const div = document.createElement('div'); div.className = 'workout-accordion'; const headerClass = `workout-header ${isActive ? 'active' : 'completed'}`; const dateStr = formatDate(w.startTime); const typeStr = w.type || 'тип не выбран'; const exCount = w.exercises.length; const cardioCount = w.cardio.length; let statusBadge; if (isReadOnly) statusBadge = '✓ архив'; else if (w.synced) statusBadge = '✓'; else statusBadge = '● не сохранено'; const editDateBtn = !isReadOnly ? ` ✎ ` : ''; div.innerHTML = `
${isActive ? '🔥 Тренировка' : '✅ Завершена'}
${dateStr} ${editDateBtn} • ${typeStr}
Упр: ${exCount} • Кардио: ${cardioCount}
${statusBadge} ›
`; const body = document.createElement('div'); body.className = `workout-body ${isExpanded ? 'expanded' : ''}`; if (isExpanded) { body.appendChild(renderWorkoutDetails(w)); } div.appendChild(body); return div; } export function renderWorkoutDetails(w) { const wrap = document.createElement('div'); const isActive = !w.endTime; const isReadOnly = w.synced && w.endTime; if (isReadOnly) { const banner = document.createElement('div'); banner.className = 'read-only-banner'; banner.textContent = '🔒 Тренировка в архиве — только просмотр'; wrap.appendChild(banner); } // Тип тренировки const typeCard = document.createElement('div'); typeCard.className = 'card'; if (isReadOnly) { typeCard.innerHTML = `
Тип тренировки
${w.type || '—'}
`; } else { typeCard.innerHTML = ` `; } wrap.appendChild(typeCard); // Кнопки добавления if (isActive && !isReadOnly) { const addSection = document.createElement('div'); addSection.className = 'add-section'; addSection.innerHTML = ` `; wrap.appendChild(addSection); } // Кардио: разминка сверху const cardioWarmup = w.cardio.filter(c => c.purpose === 'warmup' || c.purpose === 'separate'); const cardioCooldown = w.cardio.filter(c => c.purpose === 'cooldown'); if (cardioWarmup.length > 0) { const title = document.createElement('h4'); title.style.margin = '16px 0 8px'; title.textContent = '🔥 Разминка / Кардио'; wrap.appendChild(title); cardioWarmup.forEach(c => wrap.appendChild(renderCardioItem(w.id, c, isReadOnly))); } // Упражнения [...w.exercises].reverse().forEach(ex => { wrap.appendChild(renderExercise(w, ex, isReadOnly)); }); // Заминка внизу if (cardioCooldown.length > 0) { const title = document.createElement('h4'); title.style.margin = '16px 0 8px'; title.textContent = '🧘 Заминка'; wrap.appendChild(title); cardioCooldown.forEach(c => wrap.appendChild(renderCardioItem(w.id, c, isReadOnly))); } // Комментарий const notesCard = document.createElement('div'); notesCard.className = 'card mt-10'; if (isReadOnly) { notesCard.innerHTML = `
Комментарий
${w.notes || '—'}
`; } else { notesCard.innerHTML = ` `; notesCard.querySelector('textarea').oninput = (e) => { w.notes = e.target.value; window.App.saveAndRender(); }; } wrap.appendChild(notesCard); // Блок завершения const finishBlock = document.createElement('div'); finishBlock.className = 'finish-block'; if (isReadOnly) { finishBlock.innerHTML = `

🔒 Архив

Тренировка синхронизирована и завершена. Редактирование недоступно.

`; } else if (isActive) { finishBlock.innerHTML = `

Завершение тренировки

После завершения данные останутся локально до синхронизации

`; } else { finishBlock.innerHTML = `

Тренировка завершена

До синхронизации можно редактировать

`; } wrap.appendChild(finishBlock); return wrap; }