package utils

import "strconv"

func HumanSize(bytes uint64) string {
	units := []string{"B", "KB", "MB", "GB", "TB", "PB"}
	var unitIndex int
	size := float64(bytes)

	for size >= 1024 && unitIndex < len(units)-1 {
		size /= 1024
		unitIndex++
	}

	if unitIndex == 0 {
		return strconv.FormatUint(bytes, 10) + units[unitIndex]
	}

	return strconv.FormatFloat(size, 'f', 1, 64) + units[unitIndex]
}

func HumanSizeInt(bytes int64) string {
	return HumanSize(uint64(bytes))
}

func HumanDiskSize(bytes uint64) string {
	units := []string{"B", "KB", "MB", "GB", "TB", "PB"}
	var unitIndex int
	size := float64(bytes)

	for size >= 1000 && unitIndex < len(units)-1 {
		size /= 1000
		unitIndex++
	}

	if unitIndex == 0 {
		return strconv.FormatUint(bytes, 10) + units[unitIndex]
	}
	return strconv.FormatFloat(size, 'f', 1, 64) + units[unitIndex]
}
