/**
 * Utilitaires pour la gestion des jours de travail
 * Logique : Lundi-Vendredi sont les jours de travail
 */

/**
 * Calcule le jour de travail précédent selon la logique métier :
 * - Lundi → Vendredi (au lieu de Dimanche)
 * - Mardi-Vendredi → jour précédent
 * - Samedi → Vendredi
 * - Dimanche → Vendredi
 */
export function getPreviousWorkday(date: Date): Date {
  const result = new Date(date);
  result.setHours(0, 0, 0, 0);

  const dayOfWeek = result.getDay(); // 0 = Dimanche, 1 = Lundi, ..., 6 = Samedi

  switch (dayOfWeek) {
    case 1: // Lundi → Vendredi précédent
      result.setDate(result.getDate() - 3);
      break;
    case 0: // Dimanche → Vendredi précédent
      result.setDate(result.getDate() - 2);
      break;
    case 6: // Samedi → Vendredi précédent
      result.setDate(result.getDate() - 1);
      break;
    default: // Mardi-Vendredi → jour précédent
      result.setDate(result.getDate() - 1);
      break;
  }

  return result;
}

/**
 * Calcule le jour de travail suivant selon la logique métier :
 * - Vendredi → Lundi suivant
 * - Samedi → Lundi suivant
 * - Dimanche → Lundi suivant
 * - Lundi-Jeudi → jour suivant
 */
export function getNextWorkday(date: Date): Date {
  const result = new Date(date);
  result.setHours(0, 0, 0, 0);

  const dayOfWeek = result.getDay(); // 0 = Dimanche, 1 = Lundi, ..., 6 = Samedi

  switch (dayOfWeek) {
    case 5: // Vendredi → Lundi suivant
      result.setDate(result.getDate() + 3);
      break;
    case 6: // Samedi → Lundi suivant
      result.setDate(result.getDate() + 2);
      break;
    case 0: // Dimanche → Lundi suivant
      result.setDate(result.getDate() + 1);
      break;
    default: // Lundi-Jeudi → jour suivant
      result.setDate(result.getDate() + 1);
      break;
  }

  return result;
}

/**
 * Vérifie si une date est un jour de travail (Lundi-Vendredi)
 */
export function isWorkday(date: Date): boolean {
  const dayOfWeek = date.getDay();
  return dayOfWeek >= 1 && dayOfWeek <= 5; // Lundi (1) à Vendredi (5)
}

/**
 * Retourne le nom du jour en français
 */
export function getDayName(date: Date): string {
  const days = [
    'Dimanche',
    'Lundi',
    'Mardi',
    'Mercredi',
    'Jeudi',
    'Vendredi',
    'Samedi',
  ];
  return days[date.getDay()];
}
