package utils

import (
	"fmt"
	"github.com/dustin/go-humanize"
	"math"
	"math/big"
)

type flowCalculation struct{}

func FlowCalculation() flowCalculation {
	return flowCalculation{}
}

// Parse
// @description: 解析流量，序列化为字符串
// @receiver flowCalculation
// @param b
// @return string
func (flowCalculation) Parse(b int64) string {
	b2 := big.Int{}
	return humanize.BigBytes(b2.SetInt64(b))
}

// PrettyByteSizeGB
// @description:
// @param b
// @return string
func PrettyByteSizeGB(b int) string {
	bf := float64(b)
	ks := []string{"", "Ki", "Mi", "Gi"}
	for i, unit := range ks {
		if math.Abs(bf) < 1024.0 {
			return fmt.Sprintf("%3.1f%sB", bf, unit)
		}
		if i+1 >= len(ks) {
			return fmt.Sprintf("%3.1f%sB", bf, unit)
		}
		bf /= 1024.0
	}

	return fmt.Sprintf("%.1fYiB", bf)
}
