mirrored_repositories/future_of_workout/packages/exercise_api/lib/src
import 'package:exercise_api/exercise_api.dart';
// ignore_for_file: public_member_api_docs

/// Default Exercise
enum DefaultExercise {
  // Barbell
  benchPress,
  squat,
  deadlift,
  shoulderPress,
  barbellCurl,
  bentOverRow,
  frontSquat,
  inclineBenchPress,
  powerClean,
  hexBarDeadlift,
  sumoDeadlift,
  hipThrust,
  romanianDeadlift,
  cleanAndJerk,
  snatch,
  clean,
  barbellShrug,
  closeGripBenchPress,
  declineBenchPress,
  cleanAndPress,
  tBarRow,
  eZBarCurl,
  lyingTricepsExtension,
  seatedShoulderPress,
  preacherCurl,
  rackPull,
  pendlayRow,
  uprightRow,
  boxSquat,
  tricepExtension,
  bulgarianSplitSquat,
  floorPress,
  smithMachineBenchPress,
  goodMorning,
  stiffLegDeadlift,
  barbellLunge,
  zercherSquat,
  smithMachineSquat,
  overheadSquat,
  wristCurl,
  thruster,
  pushJerk,
  powerSnatch,
  splitSquat,
  barbellCalfRaise,
  reverseGripBenchPress,
  reverseWristCurl,
  landmineSquat,
  reverseBarbellCurl,
  pausedBenchPress,
  barbellGluteBridge,
  barbellReverseLunge,
  strictCurl,
  deficitDeadlift,
  neckCurl,
  safetyBarSquat,
  barbellHackSquat,
  benchPinPress,
  barbellFrontRaise,
  behindTheNeckPress,
  pauseSquat,
  logPress,
  benchPull,
  cleanHighPull,
  singleLegRomanianDeadlift,
  splitJerk,
  sumoSquat,
  cleanPull,
  yatesRow,
  snatchDeadlift,
  hangPowerClean,
  barbellPullover,
  jeffersonDeadlift,
  pauseDeadlift,
  landminePress,
  singleLegDeadlift,
  wideGripBenchPress,
  muscleSnatch,
  zPress,
  neckExtension,
  shoulderPinPress,
  vikingPress,
  spiderCurl,
  snatchPull,
  jMPress,
  pinSquat,
  wallBall,
  cheatCurl,
  walkingLunge,
  closeGripInclineBenchPress,
  smithMachineShrug,
  oneArmLandminePress,
  hexBarShrug,
  zercherDeadlift,
  bentArmBarbellPullover,
  barbellPowerShrug,
  halfSquat,
  hangSnatch,
  meadowsRow,
  jeffersonSquat,
  spotoPress,
  behindTheBackDeadlift,
  behindTheBackBarbellShrug,

  // Dumbbell
  dumbbellBenchPress,
  dumbbellCurl,
  dumbbellShoulderPress,
  inclineDumbbellBenchPress,
  dumbbellRow,
  dumbbellLateralRaise,
  hammerCurl,
  dumbbellFly,
  dumbbellLunge,
  gobletSquat,
  dumbbellShrug,
  dumbbellBulgarianSplitSquat,
  dumbbellTricepsExtension,
  dumbbellFrontRaise,
  dumbbellConcentrationCurl,
  arnoldPress,
  inclineDumbbellFly,
  dumbbellRomanianDeadlift,
  inclineDumbbellCurl,
  lyingDumbbellTricepsExtension,
  dumbbellPullover,
  dumbbellFloorPress,
  dumbbellReverseFly,
  chestSupportedDumbbellRow,
  dumbbellTricepsKickback,
  declineDumbbellBenchPress,
  dumbbellSquat,
  dumbbellCalfRaise,
  dumbbellDeadlift,
  dumbbellUprightRow,
  seatedDumbbellShoulderPress,
  dumbbellWristCurl,
  closeGripDumbbellBenchPress,
  oneArmDumbbellPreacherCurl,
  inclineHammerCurl,
  dumbbellSideBend,
  dumbbellSnatch,
  dumbbellBenchPull,
  zottmanCurl,
  renegadeRow,
  tatePress,
  dumbbellZPress,
  bentOverDumbbellRow,
  seatedDumbbellTricepsExtension,
  seatedDumbbellCurl,
  dumbbellFrontSquat,
  dumbbellReverseWristCurl,
  dumbbellPushPress,
  dumbbellSplitSquat,
  dumbbellFacePull,
  dumbbellReverseCurl,
  dumbbellInclineYRaise,
  singleLegDumbbellDeadlift,
  dumbbellCleanAndPress,
  declineDumbbellFly,
  dumbbellHighPull,
  dumbbellHangClean,
  dumbbellThruster,
  dumbbellWalkingCalfRaise,

  // Machine
  sledLegPress,
  horizontalLegPress,
  legExtension,
  chestPress,
  seatedLegCurl,
  lyingLegCurl,
  machineCalfRaise,
  hackSquat,
  machineShoulderPress,
  machineChestFly,
  verticalLegPress,
  seatedCalfRaise,
  machineRow,
  hipAbduction,
  hipAdduction,
  seatedDipMachine,
  machineSeatedCrunch,
  standingLegCurl,
  machineTricepsExtension,
  machineBicepsCurl,
  machineReverseFly,
  beltSquat,
  singleLegPress,
  sledPressCalfRaise,
  machineBackExtension,
  machineLateralRaise,
  machineShrug,
  singleLegSeatedCalfRaise,

  // Cable
  latPulldown,
  tricepsPushdown,
  seatedCableRow,
  tricepsRopePushdown,
  cableBicepsCurl,
  cableLateralRaise,
  cableFly,
  facePull,
  cableCrunch,
  cablePullThrough,
  oneArmCableBicepsCurl,
  closeGripLatPulldown,
  cableOverheadTricepsExtension,
  cableReverseFly,
  reverseGripLatPulldown,
  straightArmPulldown,
  cableWoodchopper,
  reverseGripTricepsPushdown,
  cableKickback,
  oneArmLatPulldown,
  cableUprightRow,
  oneArmSeatedCableRow,
  cableHammerCurl,
  cableLegExtension,
  cableShrug,
  oneArmPulldown,
  overheadCableCurl,
  standingCableCrunch,
  highPulleyCrunch,
  inclineCableCurl,
  lyingCableCurl,

  // Bodyweight
  pullUps,
  pushUps,
  dips,
  chinUps,
  sitUps,
  bodyweightSquat,
  muscleUps,
  crunches,
  singleLegSquat,
  oneArmPushUps,
  diamondPushUps,
  handstandPushUps,
  burpees,
  neutralGripPullUps,
  lunge,
  oneArmPullUps,
  pistolSquat,
  backExtension,
  hangingLegRaise,
  gluteBridge,
  invertedRow,
  bodyweightCalfRaise,
  russianTwist,
  lyingLegRaise,
  benchDips,
  ringDips,
  declinePushUp,
  toesToBar,
  absWheelRollout,
  reverseLunge,
  hangingKneeRaise,
  declineSitUp,
  nordicHamstringCurl,
  squatJump,
  declineCrunch,
  closeGripPushUp,
  gluteHamRaise,
  inclinePushUp,
  pikePushUp,
  bicycleCrunch,
  ringMuscleUps,
  sideLunge,
  reverseCrunches,
  sissySquat,
  flutterKicks,
  donkeyCalfRaise,
  mountainClimbers,
  archerPushUps,
  clapPullUp,
  sideLegRaise,
  gluteKickback,
  sideCrunch,
  floorHipAbduction,
  superman,
  reverseHyperextension,
  hipExtension,
  romanChairSideBend,
  squatThrust,
  scissorKicks,
  floorHipExtension,
}

extension ToExercise on DefaultExercise {
  Exercise exercise({
    Map<Muscle, MuscleInvolvement> muscles = const {},
    String imagePath = 'assets/exercises/default.svg',
    String imagePathSecondary = 'assets/exercises/default.svg',
    List<Equipment> equipment = const [],
  }) =>
      Exercise(
        id: name,
        name: displayName,
        muscles: muscles,
        imagePath: imagePath,
        imagePathSecondary: imagePathSecondary,
        equipment: equipment,
      );

  String get displayName {
    final value = name.replaceAllMapped(
      RegExp('([A-Z])'),
      (match) => ' ${match.group(1)}',
    );

    return '${value[0].toUpperCase()}${value.substring(1).toLowerCase()}';
  }
}
