package snowf

import (
	"strconv"
	"time"

	"github.com/bwmarrin/snowflake"
	"github.com/google/wire"

	bundleConfig "micro-bundle/config"
	"micro-bundle/pkg/app"
)

var Provider = wire.NewSet(NewSf)

func NewSf() *snowflake.Node {
	var err error
	var st time.Time
	nodeNum, _ := strconv.Atoi(bundleConfig.Data.SnowFlake.NodeNum)
	st, err = time.Parse("2006-01-02", bundleConfig.Data.SnowFlake.StartTime)
	if err != nil {
		panic(err)
	}
	snowflake.Epoch = st.UnixNano() / 1000000
	node, errS := snowflake.NewNode(int64(nodeNum))
	if errS != nil {
		panic(errS)
	}
	return node
}

func GenIDInt64() int64 {
	return app.ModuleClients.SfNode.Generate().Int64()
}

func GetIDBase64() string {
	return app.ModuleClients.SfNode.Generate().Base64()
}