// Copyright (c) 2020 Gitpod GmbH. All rights reserved.
// Licensed under the GNU Affero General Public License (AGPL).
// See License.AGPL.txt in the project root for license information.

package observer

import (
	"github.com/cheggaaa/pb/v3"

	"github.com/gitpod-io/gitpod/loadgen/pkg/loadgen"
)

// NewProgressBarObserver produces a new progress bar
func NewProgressBarObserver(total int) chan<- *loadgen.SessionEvent {
	res := make(chan *loadgen.SessionEvent)
	// bar := pb.Full.New(total)
	tmpl := `{{ green "spinning up:" }} {{ bar . "[" "█" (cycle . "↖" "↗" "↘" "↙" ) " " "]"}} {{speed . }} {{counters . "%s/%s"}}`
	// start bar based on our template
	bar := pb.ProgressBarTemplate(tmpl).New(total)

	go func() {
		defer bar.Finish()
		for evt := range res {
			if evt.Kind != loadgen.SessionWorkspaceStart {
				continue
			}
			bar.Increment()
			bar.Write()
		}
	}()
	return res
}
