package idgen

import (
	"sync"
)

var singletonMutex sync.Mutex
var idGenerator *DefaultIdGenerator

// SetIdGenerator .
func SetIdGenerator(options *IdGeneratorOptions) {
	singletonMutex.Lock()
	idGenerator = NewDefaultIdGenerator(options)
	singletonMutex.Unlock()
}

// NextId .
func NextId() int64 {
	if idGenerator == nil {
		singletonMutex.Lock()
		defer singletonMutex.Unlock()
		if idGenerator == nil {
			options := NewIdGeneratorOptions(1)
			idGenerator = NewDefaultIdGenerator(options)
		}
	}

	return idGenerator.NewLong()
}
