package rng

import (
	"context"
	"time"
)

func getFullFeedDuration() time.Duration {
	// full feed every 5x time of reseedAfterSeconds
	secsUntilFullFeed := reseedAfterSeconds * 5

	// full feed at most once every ten minutes
	if secsUntilFullFeed < 600 {
		secsUntilFullFeed = 600
	}

	return time.Duration(secsUntilFullFeed) * time.Second
}

func fullFeeder(ctx context.Context) error {
	fullFeedDuration := getFullFeedDuration()

	for {
		select {
		case <-time.After(fullFeedDuration):

			rngLock.Lock()
		feedAll:
			for {
				select {
				case data := <-rngFeeder:
					rng.Reseed(data)
				default:
					break feedAll
				}
			}
			rngLock.Unlock()

		case <-ctx.Done():
			return nil
		}
	}
}
