// import { Course, CourseType, CourseStatut, ResultatStatut } from '../interfaces/course';
// import { REUNIONS_MOCK } from './reunion.mocks';

// const now = new Date();
// const COURSES_PER_REUNION_BASE = 6;

// function requiredLength(t: CourseType): number {
//   switch (t) {
//     case CourseType.TIERCE:
//       return 3;
//     case CourseType.QUARTE:
//       return 4;
//     case CourseType.QUINTE:
//       return 5;
//     default:
//       return 0;
//   }
// }

// function rngPick<T>(arr: T[], seed: number): T {
//   const x = Math.abs(Math.sin(seed) * 10000);
//   const idx = Math.floor((x - Math.floor(x)) * arr.length) % arr.length;
//   return arr[idx];
// }

// function makeMockResultat(
//   type: CourseType,
//   partants: number,
//   nonPartantsNums: number[],
//   seed: number
// ): number[][] {
//   const req = requiredLength(type);
//   const np = new Set(nonPartantsNums);
//   const all = Array.from({ length: partants }, (_, i) => i + 1).filter((n) => !np.has(n));
//   const used = new Set<number>();
//   const places: number[][] = [];

//   const tiePlace = Math.abs(seed) % 10 === 0 ? ((seed % req) + req) % req : -1;

//   for (let i = 0; i < req; i++) {
//     const remaining = all.filter((n) => !used.has(n));
//     if (remaining.length === 0) {
//       places.push([]);
//       continue;
//     }
//     const first = rngPick(remaining, seed + i * 7);
//     used.add(first);
//     const slot = [first];

//     if (i === tiePlace) {
//       const remaining2 = all.filter((n) => !used.has(n));
//       if (remaining2.length > 0) {
//         const second = rngPick(remaining2, seed + i * 13);
//         used.add(second);
//         slot.push(second);
//         slot.sort((a, b) => a - b);
//       }
//     }

//     places.push(slot);
//   }

//   return places;
// }

// const COURSE_NAMES = [
//   'Prix du Delta',
//   'Coupe du Fleuve Niger',
//   'Trophée du Mandé',
//   'Challenge du Nord',
//   'Prix de Bamako',
//   'Grand Prix de Tombouctou',
//   'Prix du Sahara',
//   'Trophée du Mali',
//   'Prix de la Savane',
//   'Course de la Paix',
//   'Grand Prix du Sud',
//   'Coupe de l’Avenir',
//   'Prix du Coton',
//   'Prix de la Liberté',
//   'Prix du Marché Central',
//   'Prix du Rail',
//   'Challenge du Faso',
//   'Prix du Soleil',
//   'Prix du Soudan',
//   'Grand Prix du Président',
//   'Prix de la Jeunesse',
//   'Coupe de la Nation',
//   'Prix des Cavaliers',
//   'Trophée de l’Unité',
//   'Prix du Bénin',
//   'Grand Prix de Sikasso',
//   'Prix du Commerce',
//   'Prix du Plateau',
//   'Course des Champions',
//   'Trophée de l’Espoir',
//   'Prix du Développement',
//   'Prix de l’Amitié',
//   'Grand Prix International',
//   'Prix du Peuple',
//   'Prix de la Baie',
//   'Trophée des Pionniers',
//   'Prix du Littoral',
// ];

// const COURSE_TYPES = [CourseType.TIERCE, CourseType.QUARTE, CourseType.QUINTE];
// const COURSE_STATUTS = [
//   CourseStatut.CREATED,
//   CourseStatut.VALIDATED,
//   CourseStatut.RUNNING,
//   CourseStatut.CLOSED,
//   CourseStatut.CANCELED,
// ];

// const coursesPerReunion = new Map<string, number>();

// const courses: Course[] = [];

// REUNIONS_MOCK.forEach((reunion, reunionIndex) => {
//   const courseCount = COURSES_PER_REUNION_BASE + (reunionIndex % 2);
//   const reunionDate = new Date(`${reunion.date}T00:00:00`);

//   for (let i = 0; i < courseCount; i++) {
//     const globalIndex = courses.length;
//     const type = COURSE_TYPES[(globalIndex + i) % COURSE_TYPES.length];
//     const statut = COURSE_STATUTS[(globalIndex + reunionIndex) % COURSE_STATUTS.length];

//     const numberWithinReunion = (coursesPerReunion.get(reunion.id) ?? 0) + 1;
//     coursesPerReunion.set(reunion.id, numberWithinReunion);

//     const dateDebutParis = new Date(reunionDate);
//     dateDebutParis.setHours(8 + i, 0, 0, 0);
//     const dateFinParis = new Date(dateDebutParis);
//     dateFinParis.setHours(dateDebutParis.getHours() + 2);
//     const dateDepartCourse = new Date(reunionDate);
//     dateDepartCourse.setHours(12 + i, 30, 0, 0);

//     const partants = 10 + ((reunionIndex + i) % 6) * 2;

//     const nonPartants: string[] = numberWithinReunion % 4 === 0 ? [crypto.randomUUID()] : [];

//     const nonPartantsNums = nonPartants.map((np) => Number(np));

//     let resultat: number[][] | undefined;
//     let resultatStatut: ResultatStatut = ResultatStatut.NONE;

//     if (statut === CourseStatut.CLOSED) {
//       resultat = makeMockResultat(type, partants, nonPartantsNums, globalIndex * 31);
//       resultatStatut = ResultatStatut.CONFIRMED;
//     } else if (statut === CourseStatut.VALIDATED) {
//       resultat = makeMockResultat(type, partants, nonPartantsNums, globalIndex * 17);
//       resultatStatut = ResultatStatut.VALIDATED;
//     } else if (statut === CourseStatut.RUNNING && (globalIndex + reunionIndex) % 3 === 0) {
//       resultat = makeMockResultat(type, partants, nonPartantsNums, globalIndex * 7);
//       resultatStatut = ResultatStatut.CREATED;
//     }

//     courses.push({
//       id: crypto.randomUUID(),
//       type,
//       numero: globalIndex + 1,
//       nom: `${COURSE_NAMES[(globalIndex + reunionIndex) % COURSE_NAMES.length]} - ${
//         reunion.hippodrome.ville
//       }`,
//       dateDebutParis: dateDebutParis.toISOString(),
//       dateFinParis: dateFinParis.toISOString(),
//       dateDepartCourse: dateDepartCourse.toISOString(),
//       reunion,
//       reunionCourse: numberWithinReunion,
//       particularite:
//         (globalIndex + reunionIndex) % 2 === 0
//           ? 'Course de galop - conditions variées'
//           : 'Trot attelé - catégorie nationale',
//       partants,
//       distance: 2000 + ((reunionIndex + i) % 5) * 200,
//       condition:
//         (globalIndex + reunionIndex) % 3 === 0
//           ? 'Réservée aux chevaux de 3 ans et plus'
//           : 'Course mixte - catégorie B',
//       statut,
//       nonPartants,
//       createdBy: `user-${((globalIndex + reunionIndex) % 5) + 1}`,
//       validatedBy: statut === CourseStatut.VALIDATED ? 'admin-1' : undefined,
//       createdAt: now.toISOString(),
//       updatedAt: now.toISOString(),
//     });
//   }
// });

// coursesPerReunion.forEach((count, reunionId) => {
//   const reunion = REUNIONS_MOCK.find((r) => r.id === reunionId);
//   if (reunion) {
//     reunion.totalCourses = count;
//   }
// });

// export const COURSES_MOCK: Course[] = courses;
