package protocol

import (
	"math/rand"
)

type RandomTimestampGenerator interface {
	Next() Timestamp
}

type RealRandomTimestampGenerator struct {
	base  Timestamp
	delta int
}

func NewRandomTimestampGenerator(base Timestamp, delta int) RandomTimestampGenerator {
	return &RealRandomTimestampGenerator{
		base:  base,
		delta: delta,
	}
}

func (this *RealRandomTimestampGenerator) Next() Timestamp {
	rangeInDelta := rand.Intn(this.delta*2) - this.delta
	return this.base + Timestamp(rangeInDelta)
}