package virtbuf

import (
	"fmt"
	"time"
)

func FormatDuration(d time.Duration) string {
	result := ""

	// check if it's more than a year
	years := int(d.Hours()) / (24 * 365)
	if years > 0 {
		result += fmt.Sprintf("%dy ", years)
		return result
	}

	// check if it's more than a day
	days := int(d.Hours()) / 24
	if days > 0 {
		result += fmt.Sprintf("%dd ", days)
		return result
	}

	// check if it's more than an hour
	hours := int(d.Hours()) % 24
	if hours > 0 {
		result += fmt.Sprintf("%dh ", hours)
		return result
	}

	// check if it's more than a minute
	minutes := int(d.Minutes()) % 60
	if minutes > 0 {
		result += fmt.Sprintf("%dm ", minutes)
		return result
	}

	// check if it's more than a second
	seconds := int(d.Seconds()) % 60
	if seconds > 0 {
		result += fmt.Sprintf("%ds", seconds)
		return result
	}

	// report in milliseconds
	ms := int(d.Milliseconds())
	if ms > 100 {
		// todo: print .3s, etc ?
		return fmt.Sprintf("%1.2fs", seconds/1000)
	}
	result += fmt.Sprintf("%dms", ms)
	return result
}

func GetDurationStamp(t time.Time) string {
	// Get the current time
	currentTime := time.Now()

	// Calculate the duration between t current time
	duration := currentTime.Sub(t)

	return FormatDuration(duration)
}
