/*

 Copyright (c) [2023] [pcm]
 [pcm-coordinator] is licensed under Mulan PSL v2.
 You can use this software according to the terms and conditions of the Mulan PSL v2.
 You may obtain a copy of Mulan PSL v2 at:
          http://license.coscl.org.cn/MulanPSL2
 THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 EITHER EXPaRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 See the Mulan PSL v2 for more details.

*/

package utils

import (
	"github.com/bwmarrin/snowflake"
	"github.com/zeromicro/go-zero/core/logx"
)

var node *snowflake.Node

func InitSnowflake(machineID int64) (err error) {
	node, err = snowflake.NewNode(machineID)
	if err != nil {
		logx.Errorf("snowflake Init error : %s", err)
		return
	}

	return
}

// GenSnowflakeID 生成雪花算法id
// machineId 工作id
func GenSnowflakeID() int64 {
	return node.Generate().Int64()
}

// GenSnowflakeIDStr 工作id
func GenSnowflakeIDStr() string {
	return node.Generate().String()
}

// GenSnowflakeIDStr 工作id
func GenSnowflakeIDUint() uint {
	return uint(node.Generate().Int64())
}
