// Package barpool provides access to the global
// pool of progress bars, so they could be rendered
// altogether.
package barpool

import (
	"fmt"
	"os"

	"github.com/VictoriaMetrics/VictoriaMetrics/app/vmctl/terminal"
	"github.com/cheggaaa/pb/v3"
)

var pool = pb.NewPool()

// Add adds bar to the global pool
func Add(bar *pb.ProgressBar) { pool.Add(bar) }

// Start starts the global pool
// Must be called after all progress bars were added
func Start() error { return pool.Start() }

// Stop stops the global pool
func Stop() { _ = pool.Stop() }

// AddWithTemplate adds bar with the given template
// to the global pool
func AddWithTemplate(format string, total int) *pb.ProgressBar {
	tpl := getTemplate(format)
	bar := pb.ProgressBarTemplate(tpl).New(total)
	Add(bar)
	return bar
}

// NewSingleProgress returns progress bar with given template
func NewSingleProgress(format string, total int) *pb.ProgressBar {
	tpl := getTemplate(format)
	return pb.ProgressBarTemplate(tpl).New(total)
}

func getTemplate(format string) string {
	isTerminal := terminal.IsTerminal(int(os.Stdout.Fd()))
	if !isTerminal {
		format = fmt.Sprintf("%s\n", format)
	}
	return format
}