/**
 * Utilitaires pour les dates et durées
 */

/**
 * Convertit une durée au format HH:MM:SS en millisecondes
 * @param time - Durée au format "HH:MM:SS" ou "MM:SS"
 * @returns Durée en millisecondes, ou null si invalide
 */
export function parseTimeToMs(time: string | null | undefined): number | null {
  if (!time) return null;

  const parts = time.split(':').map(Number);
  
  if (parts.length === 3) {
    // HH:MM:SS
    const hours = parts[0] ?? 0;
    const minutes = parts[1] ?? 0;
    const seconds = parts[2] ?? 0;
    if (isNaN(hours) || isNaN(minutes) || isNaN(seconds)) return null;
    return (hours * 3600 + minutes * 60 + seconds) * 1000;
  } else if (parts.length === 2) {
    // MM:SS
    const minutes = parts[0] ?? 0;
    const seconds = parts[1] ?? 0;
    if (isNaN(minutes) || isNaN(seconds)) return null;
    return (minutes * 60 + seconds) * 1000;
  }

  return null;
}

/**
 * Convertit des millisecondes en format HH:MM:SS
 * @param ms - Durée en millisecondes
 * @returns Durée au format "HH:MM:SS" ou "MM:SS"
 */
export function formatMsToTime(ms: number | null): string {
  if (ms === null || ms === undefined || ms < 0) return '--:--';

  const totalSeconds = Math.floor(ms / 1000);
  const hours = Math.floor(totalSeconds / 3600);
  const minutes = Math.floor((totalSeconds % 3600) / 60);
  const seconds = totalSeconds % 60;

  const h = hours > 0 ? `${hours}:` : '';
  const m = `${minutes.toString().padStart(2, '0')}:`;
  const s = seconds.toString().padStart(2, '0');
  
  return `${h}${m}${s}`;
}
