/** Единицы двоичные (КиБ/МиБ/…), но подписи привычные — так их и пишут в панелях хостингов. */
const UNITS = ['B', 'KB', 'MB', 'GB', 'TB', 'PB']

/**
 * Байты в человеческий размер. Точность плавающая: у гигабайт десятая доля значима, у килобайт —
 * уже шум, и «1.0 KB» читается хуже, чем «1 KB».
 */
export function formatBytes(bytes: number): string {
  if (!Number.isFinite(bytes) || bytes <= 0) return '0 B'

  const power = Math.min(Math.floor(Math.log(bytes) / Math.log(1024)), UNITS.length - 1)
  const value = bytes / 1024 ** power
  const digits = power >= 3 && value < 100 ? 1 : 0
  return `${value.toFixed(digits)} ${UNITS[power]}`
}

/** Доля в процентах для полос и подписей; 0 — когда делить не на что. */
export function percentOf(part: number, total: number): number {
  return total > 0 ? (part / total) * 100 : 0
}
