package components

import (
	"strings"
	"sync"
)

// TODO: move me to a common module (used in multiple repos)

const (
	SpinnerDotSet = "⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏"
)

type Spinner struct {
	index   int
	charset []string
	lock    sync.Mutex
}

func NewSpinner(charset string) Spinner {
	return Spinner{
		charset: strings.Split(charset, ""),
	}
}

func (s *Spinner) Current() string {
	s.lock.Lock()
	defer s.lock.Unlock()

	return s.charset[s.index]
}

func (s *Spinner) Next() string {
	s.lock.Lock()
	defer s.lock.Unlock()
	c := s.charset[s.index]
	s.index++
	if s.index >= len(s.charset) {
		s.index = 0
	}
	return c
}
