package idgenerator

import (
	"fmt"

	"github.com/bwmarrin/snowflake"
)

type idGeneratorImp struct {
	node *snowflake.Node
}

type NodeID int64

func NewSnowflakeID(nid NodeID) IDGenerator {
	node, err := snowflake.NewNode(int64(nid))
	if err != nil {
		panic(fmt.Sprintf("failed to create snowflake node: %v", err))
	}
	return idGeneratorImp{node: node}
}

func (i idGeneratorImp) MustNew() uint64 {
	id := i.node.Generate()
	return uint64(id)
}
