/**
 * Utilitaires pour la gestion des dates
 * Gère correctement les conversions entre heure locale et UTC
 */

/**
 * Convertit une chaîne datetime-local (format: "2025-01-15T14:30") en Date
 * en construisant la date avec une chaîne ISO qui force l'heure locale
 * Préserve l'heure locale sans conversion UTC
 */
export function parseLocalDateTime(dateTimeString: string): Date {
  if (!dateTimeString) {
    throw new Error('Date string is required');
  }
  
  // Le format datetime-local est "YYYY-MM-DDTHH:mm"
  const match = dateTimeString.match(/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})/);
  
  if (!match) {
    throw new Error(`Invalid date format: ${dateTimeString}. Expected YYYY-MM-DDTHH:mm`);
  }
  
  const [, year, month, day, hours, minutes] = match;
  
  // Créer un objet Date en utilisant le constructeur avec composants
  // MySQL stocke en UTC, donc on doit compenser le décalage horaire
  const date = new Date(
    parseInt(year),
    parseInt(month) - 1,
    parseInt(day),
    parseInt(hours),
    parseInt(minutes),
    0
  );
  
  // Compenser le décalage UTC en ajoutant le décalage du fuseau horaire
  // Cela garantit que l'heure stockée en UTC correspond à l'heure locale saisie
  const offset = date.getTimezoneOffset(); // en minutes (négatif pour Europe/Paris)
  date.setMinutes(date.getMinutes() - offset);
  
  if (isNaN(date.getTime())) {
    throw new Error(`Invalid date string: ${dateTimeString}`);
  }
  
  return date;
}

/**
 * Formate une Date en chaîne datetime-local pour les inputs HTML
 * Format: "YYYY-MM-DDTHH:mm"
 */
export function formatToLocalDateTime(date: Date): string {
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, '0');
  const day = String(date.getDate()).padStart(2, '0');
  const hours = String(date.getHours()).padStart(2, '0');
  const minutes = String(date.getMinutes()).padStart(2, '0');
  
  return `${year}-${month}-${day}T${hours}:${minutes}`;
}
