package utils

import (
	"fmt"
	"math/rand"
	"strconv"
	"time"
)

// Generator 资产编号生成器
var Generator *AssetNumberGenerator

// init 初始化
func init() {
	Generator = &AssetNumberGenerator{dateMap: make(map[string]int)}
}

// AssetNumberGenerator 资产编号生成器
type AssetNumberGenerator struct {
	dateMap map[string]int
}

// GenerateAssetNumber 生成资产编号
// 生成规则:4位平台id+8位登记日期+5位登记次序+4位随机数 = 21位
func (g *AssetNumberGenerator) GenerateAssetNumber(platformId string) string {
	// 获取当前日期
	date := time.Now().Format("20060102")
	// 从map中查询,当日的累加索引
	// 如果不存在,则从1开始计数
	// 如果存在,则+1
	index, exist := g.dateMap[date]
	if !exist {
		index = 1
	} else {
		index++
	}
	g.dateMap[date] = index
	indexStr := fmt.Sprintf("%05d", index)
	randChar := strconv.Itoa(rand.Intn(9000) + 1000)

	prefix := "TEST"
	if platformId != "" {
		prefix = platformId
	}

	identifier := prefix + date + indexStr + randChar
	return identifier
}