import '../../domain/domain.dart';
import 'starter_content.dart';

const basketStarterExerciseSeedsV1 = [
  StarterExerciseSeed(
    id: 'starter-v1-exercise-form-shooting',
    name: 'Form shooting proche panier',
    description: 'Travail technique près du cercle, priorité au geste propre.',
    category: ExerciseCategory.shoot,
    hasRepsMeasure: true,
    hasScoreMeasure: true,
    scoreLabel: 'Réussites',
    scoreUnit: 'paniers',
    defaultTargetReps: 25,
    defaultTargetScore: 20,
  ),
  StarterExerciseSeed(
    id: 'starter-v1-exercise-spot-shooting-5-positions',
    name: 'Spot shooting 5 positions',
    description: '5 tirs depuis 5 spots autour de la raquette ou du périmètre.',
    category: ExerciseCategory.shoot,
    hasRepsMeasure: true,
    hasScoreMeasure: true,
    scoreLabel: 'Réussites',
    scoreUnit: 'paniers',
    defaultTargetReps: 1,
    defaultTargetScore: 15,
    steps: [
      StarterExerciseStepSeed(
        id: 'starter-v1-step-spot-shooting-right-corner',
        name: 'Coin droit',
        type: ExerciseStepType.reps,
        defaultTargetValue: 5,
      ),
      StarterExerciseStepSeed(
        id: 'starter-v1-step-spot-shooting-right-wing',
        name: 'Aile droite',
        type: ExerciseStepType.reps,
        defaultTargetValue: 5,
      ),
      StarterExerciseStepSeed(
        id: 'starter-v1-step-spot-shooting-top',
        name: 'Face cercle',
        type: ExerciseStepType.reps,
        defaultTargetValue: 5,
      ),
      StarterExerciseStepSeed(
        id: 'starter-v1-step-spot-shooting-left-wing',
        name: 'Aile gauche',
        type: ExerciseStepType.reps,
        defaultTargetValue: 5,
      ),
      StarterExerciseStepSeed(
        id: 'starter-v1-step-spot-shooting-left-corner',
        name: 'Coin gauche',
        type: ExerciseStepType.reps,
        defaultTargetValue: 5,
      ),
    ],
  ),
  StarterExerciseSeed(
    id: 'starter-v1-exercise-catch-and-shoot',
    name: 'Catch & shoot',
    description: 'Recevoir, armer vite, tirer équilibré.',
    category: ExerciseCategory.shoot,
    hasRepsMeasure: true,
    hasScoreMeasure: true,
    scoreLabel: 'Réussites',
    scoreUnit: 'paniers',
    defaultTargetReps: 20,
    defaultTargetScore: 12,
  ),
  StarterExerciseSeed(
    id: 'starter-v1-exercise-pull-up-shooting',
    name: 'Tir après dribble',
    description: 'Création d\'espace puis tir en rythme.',
    category: ExerciseCategory.shoot,
    hasRepsMeasure: true,
    hasScoreMeasure: true,
    scoreLabel: 'Réussites',
    scoreUnit: 'paniers',
    defaultTargetReps: 20,
    defaultTargetScore: 10,
    steps: [
      StarterExerciseStepSeed(
        id: 'starter-v1-step-pull-up-right',
        name: 'Départ main droite',
        type: ExerciseStepType.reps,
        defaultTargetValue: 10,
      ),
      StarterExerciseStepSeed(
        id: 'starter-v1-step-pull-up-left',
        name: 'Départ main gauche',
        type: ExerciseStepType.reps,
        defaultTargetValue: 10,
      ),
    ],
  ),
  StarterExerciseSeed(
    id: 'starter-v1-exercise-free-throw-routine',
    name: 'Routine lancers francs',
    description: 'Série calme avec routine complète avant chaque tir.',
    category: ExerciseCategory.freeThrows,
    hasRepsMeasure: true,
    hasScoreMeasure: true,
    scoreLabel: 'Réussites',
    scoreUnit: 'lancers',
    defaultTargetReps: 20,
    defaultTargetScore: 16,
  ),
  StarterExerciseSeed(
    id: 'starter-v1-exercise-fatigue-free-throws',
    name: 'Lancers francs sous fatigue',
    description: 'Lancers francs après effort court.',
    category: ExerciseCategory.freeThrows,
    hasRepsMeasure: true,
    hasScoreMeasure: true,
    scoreLabel: 'Réussites',
    scoreUnit: 'lancers',
    defaultTargetReps: 5,
    defaultTargetScore: 8,
    steps: [
      StarterExerciseStepSeed(
        id: 'starter-v1-step-fatigue-free-throws-baseline-run',
        name: 'Course ligne de fond',
        type: ExerciseStepType.time,
        defaultTargetValue: 15,
      ),
      StarterExerciseStepSeed(
        id: 'starter-v1-step-fatigue-free-throws-two-shots',
        name: '2 lancers francs',
        type: ExerciseStepType.reps,
        defaultTargetValue: 2,
      ),
    ],
  ),
  StarterExerciseSeed(
    id: 'starter-v1-exercise-stationary-dribble-alternating',
    name: 'Dribble stationnaire alterné',
    description: 'Contrôle de balle enchaîné main droite/main gauche.',
    category: ExerciseCategory.dribble,
    hasTimeMeasure: true,
    defaultTargetTimeSeconds: 60,
    steps: [
      StarterExerciseStepSeed(
        id: 'starter-v1-step-stationary-dribble-right-low',
        name: 'Main droite basse',
        type: ExerciseStepType.time,
        defaultTargetValue: 15,
      ),
      StarterExerciseStepSeed(
        id: 'starter-v1-step-stationary-dribble-left-low',
        name: 'Main gauche basse',
        type: ExerciseStepType.time,
        defaultTargetValue: 15,
      ),
      StarterExerciseStepSeed(
        id: 'starter-v1-step-stationary-dribble-crossovers',
        name: 'Crossovers',
        type: ExerciseStepType.time,
        defaultTargetValue: 15,
      ),
      StarterExerciseStepSeed(
        id: 'starter-v1-step-stationary-dribble-between-legs',
        name: 'Entre les jambes',
        type: ExerciseStepType.time,
        defaultTargetValue: 15,
      ),
    ],
  ),
  StarterExerciseSeed(
    id: 'starter-v1-exercise-combo-change-of-hand',
    name: 'Combo changement de main',
    description: 'Enchaîner les changements de main avec régularité.',
    category: ExerciseCategory.dribble,
    hasRepsMeasure: true,
    defaultTargetReps: 10,
    steps: [
      StarterExerciseStepSeed(
        id: 'starter-v1-step-combo-crossover',
        name: 'Crossover',
        type: ExerciseStepType.reps,
        defaultTargetValue: 1,
      ),
      StarterExerciseStepSeed(
        id: 'starter-v1-step-combo-between-legs',
        name: 'Entre les jambes',
        type: ExerciseStepType.reps,
        defaultTargetValue: 1,
      ),
      StarterExerciseStepSeed(
        id: 'starter-v1-step-combo-behind-back',
        name: 'Dans le dos',
        type: ExerciseStepType.reps,
        defaultTargetValue: 1,
      ),
      StarterExerciseStepSeed(
        id: 'starter-v1-step-combo-explosive-start',
        name: 'Départ explosif',
        type: ExerciseStepType.reps,
        defaultTargetValue: 1,
      ),
    ],
  ),
  StarterExerciseSeed(
    id: 'starter-v1-exercise-cone-slalom',
    name: 'Slalom cônes',
    description: 'Conduite de balle en vitesse sur parcours.',
    category: ExerciseCategory.dribble,
    hasRepsMeasure: true,
    hasScoreMeasure: true,
    scoreInputMode: ScoreInputMode.stopwatch,
    scoreLabel: 'Temps parcours',
    defaultTargetReps: 6,
    defaultTargetScoreTimeMs: 12000,
  ),
  StarterExerciseSeed(
    id: 'starter-v1-exercise-mikan-drill',
    name: 'Mikan drill',
    description: 'Alternance de finitions près du cercle.',
    category: ExerciseCategory.finishing,
    hasRepsMeasure: true,
    hasScoreMeasure: true,
    scoreLabel: 'Réussites',
    scoreUnit: 'paniers',
    defaultTargetReps: 20,
    defaultTargetScore: 16,
  ),
  StarterExerciseSeed(
    id: 'starter-v1-exercise-weak-hand-finishes',
    name: 'Finitions main faible',
    description: 'Layups et finitions contrôlées main faible.',
    category: ExerciseCategory.finishing,
    hasRepsMeasure: true,
    hasScoreMeasure: true,
    scoreLabel: 'Réussites',
    scoreUnit: 'paniers',
    defaultTargetReps: 20,
    defaultTargetScore: 12,
  ),
  StarterExerciseSeed(
    id: 'starter-v1-exercise-alternating-layups',
    name: 'Layups alternés droite/gauche',
    description: 'Alterner les côtés avec course courte.',
    category: ExerciseCategory.finishing,
    hasRepsMeasure: true,
    hasScoreMeasure: true,
    scoreLabel: 'Réussites',
    scoreUnit: 'paniers',
    defaultTargetReps: 20,
    defaultTargetScore: 16,
    steps: [
      StarterExerciseStepSeed(
        id: 'starter-v1-step-alternating-layup-right',
        name: 'Layup côté droit',
        type: ExerciseStepType.reps,
        defaultTargetValue: 1,
      ),
      StarterExerciseStepSeed(
        id: 'starter-v1-step-alternating-layup-left',
        name: 'Layup côté gauche',
        type: ExerciseStepType.reps,
        defaultTargetValue: 1,
      ),
    ],
  ),
  StarterExerciseSeed(
    id: 'starter-v1-exercise-contact-finishing',
    name: 'Finition avec contact',
    description: 'Absorber le contact puis finir près du cercle.',
    category: ExerciseCategory.finishing,
    hasRepsMeasure: true,
    hasScoreMeasure: true,
    scoreLabel: 'Réussites',
    scoreUnit: 'paniers',
    defaultTargetReps: 12,
    defaultTargetScore: 8,
  ),
  StarterExerciseSeed(
    id: 'starter-v1-exercise-half-court-suicides',
    name: 'Suicides demi-terrain',
    description: 'Aller-retour progressif sur lignes du terrain.',
    category: ExerciseCategory.conditioning,
    hasRepsMeasure: true,
    hasScoreMeasure: true,
    scoreInputMode: ScoreInputMode.stopwatch,
    scoreLabel: 'Temps total',
    defaultTargetReps: 4,
    defaultTargetScoreTimeMs: 45000,
  ),
  StarterExerciseSeed(
    id: 'starter-v1-exercise-line-hops',
    name: 'Line hops',
    description: 'Petits sauts rapides de part et d\'autre d\'une ligne.',
    category: ExerciseCategory.conditioning,
    hasTimeMeasure: true,
    hasScoreMeasure: true,
    scoreLabel: 'Contacts',
    scoreUnit: 'touches',
    defaultTargetTimeSeconds: 30,
    defaultTargetScore: 50,
  ),
  StarterExerciseSeed(
    id: 'starter-v1-exercise-baseline-sprint',
    name: 'Sprint ligne de fond',
    description: 'Départs explosifs répétés.',
    category: ExerciseCategory.conditioning,
    hasRepsMeasure: true,
    hasScoreMeasure: true,
    scoreInputMode: ScoreInputMode.stopwatch,
    scoreLabel: 'Meilleur sprint',
    defaultTargetReps: 10,
    defaultTargetScoreTimeMs: 5000,
  ),
  StarterExerciseSeed(
    id: 'starter-v1-exercise-defensive-slides',
    name: 'Slides défensifs',
    description: 'Déplacements latéraux bas et contrôlés.',
    category: ExerciseCategory.defense,
    hasTimeMeasure: true,
    defaultTargetTimeSeconds: 45,
  ),
  StarterExerciseSeed(
    id: 'starter-v1-exercise-closeout-slide',
    name: 'Closeout + slide',
    description: 'Fermer l\'espace puis contenir latéralement.',
    category: ExerciseCategory.defense,
    hasRepsMeasure: true,
    defaultTargetReps: 10,
    steps: [
      StarterExerciseStepSeed(
        id: 'starter-v1-step-closeout-slide-closeout',
        name: 'Closeout',
        type: ExerciseStepType.reps,
        defaultTargetValue: 1,
      ),
      StarterExerciseStepSeed(
        id: 'starter-v1-step-closeout-slide-right',
        name: 'Slide droite',
        type: ExerciseStepType.reps,
        defaultTargetValue: 1,
      ),
      StarterExerciseStepSeed(
        id: 'starter-v1-step-closeout-slide-left',
        name: 'Slide gauche',
        type: ExerciseStepType.reps,
        defaultTargetValue: 1,
      ),
    ],
  ),
  StarterExerciseSeed(
    id: 'starter-v1-exercise-rebound-outlet-pass',
    name: 'Rebond + outlet pass',
    description: 'Capturer le rebond puis ressortir proprement.',
    category: ExerciseCategory.defense,
    hasRepsMeasure: true,
    hasScoreMeasure: true,
    scoreLabel: 'Réussites',
    scoreUnit: 'actions',
    defaultTargetReps: 12,
    defaultTargetScore: 10,
    steps: [
      StarterExerciseStepSeed(
        id: 'starter-v1-step-rebound-outlet-rebound',
        name: 'Rebond',
        type: ExerciseStepType.reps,
        defaultTargetValue: 1,
      ),
      StarterExerciseStepSeed(
        id: 'starter-v1-step-rebound-outlet-pass',
        name: 'Outlet pass',
        type: ExerciseStepType.reps,
        defaultTargetValue: 1,
      ),
    ],
  ),
  StarterExerciseSeed(
    id: 'starter-v1-exercise-basket-hip-mobility',
    name: 'Mobilité hanches basket',
    description: 'Préparer hanches, appuis et amplitude.',
    category: ExerciseCategory.mobility,
    hasTimeMeasure: true,
    defaultTargetTimeSeconds: 300,
    steps: [
      StarterExerciseStepSeed(
        id: 'starter-v1-step-hip-mobility-openers',
        name: 'Ouverture hanches',
        type: ExerciseStepType.time,
        defaultTargetValue: 60,
      ),
      StarterExerciseStepSeed(
        id: 'starter-v1-step-hip-mobility-lunges',
        name: 'Fentes dynamiques',
        type: ExerciseStepType.time,
        defaultTargetValue: 60,
      ),
      StarterExerciseStepSeed(
        id: 'starter-v1-step-hip-mobility-squat-hold',
        name: 'Squat hold',
        type: ExerciseStepType.time,
        defaultTargetValue: 60,
      ),
      StarterExerciseStepSeed(
        id: 'starter-v1-step-hip-mobility-adductors',
        name: 'Adducteurs',
        type: ExerciseStepType.time,
        defaultTargetValue: 60,
      ),
      StarterExerciseStepSeed(
        id: 'starter-v1-step-hip-mobility-breathing',
        name: 'Respiration basse',
        type: ExerciseStepType.time,
        defaultTargetValue: 60,
      ),
    ],
  ),
  StarterExerciseSeed(
    id: 'starter-v1-exercise-ankles-calves',
    name: 'Chevilles et mollets',
    description: 'Préparer les appuis, réceptions et changements de direction.',
    category: ExerciseCategory.mobility,
    hasTimeMeasure: true,
    defaultTargetTimeSeconds: 180,
    steps: [
      StarterExerciseStepSeed(
        id: 'starter-v1-step-ankles-calves-right-ankle',
        name: 'Mobilité cheville droite',
        type: ExerciseStepType.time,
        defaultTargetValue: 60,
      ),
      StarterExerciseStepSeed(
        id: 'starter-v1-step-ankles-calves-left-ankle',
        name: 'Mobilité cheville gauche',
        type: ExerciseStepType.time,
        defaultTargetValue: 60,
      ),
      StarterExerciseStepSeed(
        id: 'starter-v1-step-ankles-calves-dynamic-calves',
        name: 'Mollets dynamiques',
        type: ExerciseStepType.time,
        defaultTargetValue: 60,
      ),
    ],
  ),
];

const basketStarterProgramSeedV1 = StarterProgramSeed(
  id: 'starter-v1-program-basket-foundations-45-min',
  name: 'Fondations basket - 45 min',
  defaultRestSeconds: 45,
  exercises: [
    StarterProgramExerciseSeed(
      id: 'starter-v1-program-exercise-hip-mobility',
      exerciseId: 'starter-v1-exercise-basket-hip-mobility',
      setsCount: 1,
      enabledMeasures: {WorkoutMeasure.time},
      targetTimeSeconds: 300,
      restSecondsOverride: 30,
    ),
    StarterProgramExerciseSeed(
      id: 'starter-v1-program-exercise-stationary-dribble',
      exerciseId: 'starter-v1-exercise-stationary-dribble-alternating',
      setsCount: 2,
      enabledMeasures: {WorkoutMeasure.time},
      targetTimeSeconds: 60,
      restSecondsOverride: 30,
    ),
    StarterProgramExerciseSeed(
      id: 'starter-v1-program-exercise-combo-change-of-hand',
      exerciseId: 'starter-v1-exercise-combo-change-of-hand',
      setsCount: 2,
      enabledMeasures: {WorkoutMeasure.reps},
      targetReps: 10,
      restSecondsOverride: 45,
    ),
    StarterProgramExerciseSeed(
      id: 'starter-v1-program-exercise-form-shooting',
      exerciseId: 'starter-v1-exercise-form-shooting',
      setsCount: 3,
      enabledMeasures: {WorkoutMeasure.reps, WorkoutMeasure.score},
      targetReps: 25,
      targetScore: 20,
      restSecondsOverride: 45,
    ),
    StarterProgramExerciseSeed(
      id: 'starter-v1-program-exercise-spot-shooting',
      exerciseId: 'starter-v1-exercise-spot-shooting-5-positions',
      setsCount: 3,
      enabledMeasures: {WorkoutMeasure.reps, WorkoutMeasure.score},
      targetReps: 1,
      targetScore: 15,
      restSecondsOverride: 60,
    ),
    StarterProgramExerciseSeed(
      id: 'starter-v1-program-exercise-alternating-layups',
      exerciseId: 'starter-v1-exercise-alternating-layups',
      setsCount: 3,
      enabledMeasures: {WorkoutMeasure.reps, WorkoutMeasure.score},
      targetReps: 20,
      targetScore: 16,
      restSecondsOverride: 45,
    ),
    StarterProgramExerciseSeed(
      id: 'starter-v1-program-exercise-free-throw-routine',
      exerciseId: 'starter-v1-exercise-free-throw-routine',
      setsCount: 4,
      enabledMeasures: {WorkoutMeasure.reps, WorkoutMeasure.score},
      targetReps: 10,
      targetScore: 8,
      restSecondsOverride: 30,
    ),
    StarterProgramExerciseSeed(
      id: 'starter-v1-program-exercise-defensive-slides',
      exerciseId: 'starter-v1-exercise-defensive-slides',
      setsCount: 4,
      enabledMeasures: {WorkoutMeasure.time},
      targetTimeSeconds: 45,
    ),
  ],
);

const basketStarterWorkoutTemplateSeedV1 = StarterWorkoutTemplateSeed(
  id: 'starter-v1-workout-template-basket-foundations-example',
  name: 'Séance exemple - Fondations basket',
  programSnapshotId: 'starter-v1-workout-template-program-basket-foundations',
);
