/**
 * Duration formatting utilities.
 *
 * Durations are milliseconds — the app's neutral time unit. The backend has
 * already converted any provider unit (e.g. Jellyfin ticks) before it reaches
 * the frontend, so no tick arithmetic lives here.
 */

/**
 * Convert a millisecond duration to a formatted string.
 * @param ms Duration in milliseconds
 * @param format Format type: "mm:ss" (default) or "hh:mm:ss"
 * @returns Formatted duration string or empty string if no duration
 */
export function formatDuration(ms?: number | null, format: "mm:ss" | "hh:mm:ss" = "mm:ss"): string {
  if (!ms) return "";

  const totalSeconds = Math.floor(ms / 1000);

  if (format === "hh:mm:ss") {
    const hours = Math.floor(totalSeconds / 3600);
    const minutes = Math.floor((totalSeconds % 3600) / 60);
    const seconds = totalSeconds % 60;

    return `${hours}:${minutes.toString().padStart(2, "0")}:${seconds.toString().padStart(2, "0")}`;
  }

  // Default "mm:ss" format
  const minutes = Math.floor(totalSeconds / 60);
  const seconds = totalSeconds % 60;
  return `${minutes}:${seconds.toString().padStart(2, "0")}`;
}

/**
 * Convert seconds to formatted duration string
 * @param seconds Duration in seconds
 * @param format Format type: "mm:ss" (default) or "hh:mm:ss"
 * @returns Formatted duration string
 */
export function formatSecondsDuration(seconds: number, format: "mm:ss" | "hh:mm:ss" = "mm:ss"): string {
  if (format === "hh:mm:ss") {
    const hours = Math.floor(seconds / 3600);
    const minutes = Math.floor((seconds % 3600) / 60);
    const secs = seconds % 60;

    return `${hours}:${minutes.toString().padStart(2, "0")}:${secs.toString().padStart(2, "0")}`;
  }

  // Default "mm:ss" format
  const minutes = Math.floor(seconds / 60);
  const secs = seconds % 60;
  return `${minutes}:${secs.toString().padStart(2, "0")}`;
}
