package user

import "fmt"

// NumericDisplayUserIDAllocator 基于 user_id 生成数字短号候选。
// 它只生成格式合法的候选，唯一性仍由 repository 事务保证。
type NumericDisplayUserIDAllocator struct{}

// NextDisplayUserID 返回 6 到 10 位数字短号候选。
func (NumericDisplayUserIDAllocator) NextDisplayUserID(userID int64, attempt int) string {
	base := int64(100000)
	space := int64(9_999_000_000)
	value := base + ((userID + int64(attempt)) % space)
	if value < base {
		// 负数 user_id 只可能来自测试注入，仍要规整成合法候选。
		value = base - value
	}

	return fmt.Sprintf("%d", value)
}
