export type AnimationType = | 'curl' | 'press' | 'sidefly' | 'crunch' export interface ExercisePreset { id: string name: string equipment: '哑铃' | '健身环' | '徒手' icon: string animationType: AnimationType description: string tips: string[] contraindication?: string defaultBpm: number bpmMin: number bpmMax: number defaultSets: number defaultReps: number defaultRestSec: number beatsPerRep: number } export const EXERCISE_PRESETS: ExercisePreset[] = [ { id: 'dumbbell-curl', name: '哑铃弯举', equipment: '哑铃', icon: '🏋', animationType: 'curl', description: '锻炼肱二头肌,注意肘部固定不动', tips: ['肘部贴紧身体', '上举吸气,下落呼气', '动作放慢,控制重量'], contraindication: '肘关节炎症急性期不宜', defaultBpm: 60, bpmMin: 40, bpmMax: 100, defaultSets: 3, defaultReps: 12, defaultRestSec: 60, beatsPerRep: 2, }, { id: 'dumbbell-press', name: '哑铃推举', equipment: '哑铃', icon: '🏋', animationType: 'press', description: '锻炼肩部三角肌,核心保持收紧', tips: ['不要含胸驼背', '推举时呼气', '不要锁死肘关节'], contraindication: '肩袖损伤者请咨询医生', defaultBpm: 60, bpmMin: 40, bpmMax: 90, defaultSets: 3, defaultReps: 10, defaultRestSec: 90, beatsPerRep: 2, }, { id: 'dumbbell-sidefly', name: '哑铃侧平举', equipment: '哑铃', icon: '🏋', animationType: 'sidefly', description: '锻炼三角肌中束,重量宜轻不宜重', tips: ['手肘微屈', '抬至与肩平齐即可', '想象用肩膀发力,不是手臂'], defaultBpm: 60, bpmMin: 40, bpmMax: 80, defaultSets: 3, defaultReps: 12, defaultRestSec: 60, beatsPerRep: 2, }, { id: 'crunch', name: '集中机(仰卧卷腹)', equipment: '健身环', icon: '💪', animationType: 'crunch', description: '锻炼腹直肌,借助健身环增加阻力', tips: ['下背贴地', '用腹部发力,不是脖子', '上抬呼气,下落吸气'], contraindication: '腰椎间盘突出急性期不宜', defaultBpm: 50, bpmMin: 40, bpmMax: 80, defaultSets: 3, defaultReps: 15, defaultRestSec: 60, beatsPerRep: 2, }, ] export function getPresetById(id: string): ExercisePreset | undefined { return EXERCISE_PRESETS.find((e) => e.id === id) }