package agentteambridge

import (
	"math/rand"
	"sync"
	"time"
)

type RandomSelector struct{}

func (RandomSelector) Select(tokens []TokenState) (TokenState, bool) {
	if len(tokens) == 0 {
		return TokenState{}, false
	}
	source := rand.New(rand.NewSource(time.Now().UnixNano()))
	return tokens[source.Intn(len(tokens))], true
}

type RoundRobinSelector struct {
	mu   sync.Mutex
	next int
}

func (selector *RoundRobinSelector) Select(tokens []TokenState) (TokenState, bool) {
	if len(tokens) == 0 {
		return TokenState{}, false
	}
	selector.mu.Lock()
	defer selector.mu.Unlock()
	selected := tokens[selector.next%len(tokens)]
	selector.next = (selector.next + 1) % len(tokens)
	return selected, true
}
