const MAX_REASONABLE_BYTES = 8 * 1024 ** 4;

function formatBytes(bytes) {
  const value = Number(bytes);
  if (!Number.isFinite(value) || value <= 0) return "0 B";
  const units = ["B", "KB", "MB", "GB", "TB"];
  const index = Math.min(units.length - 1, Math.floor(Math.log(value) / Math.log(1024)));
  const amount = value / (1024 ** index);
  return `${amount.toFixed(index === 0 ? 0 : amount >= 100 ? 0 : amount >= 10 ? 1 : 2)} ${units[index]}`;
}

function bytesFromMb(megabytes) {
  const value = Number(megabytes);
  return Number.isFinite(value) && value > 0 ? Math.round(value * 1048576) : 0;
}

function sanityCheckSize(label, bytes, expectedMaxBytes = MAX_REASONABLE_BYTES) {
  const value = Number(bytes);
  if (!Number.isFinite(value) || value < 0 || value > expectedMaxBytes) {
    return {
      valid: false,
      label,
      bytes: value,
      message: `${label} reported an implausible byte count (${value}).`
    };
  }
  return { valid: true, label, bytes: value };
}

module.exports = { formatBytes, bytesFromMb, sanityCheckSize };
