package intUtil

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

// ShuffleIntDigits 打乱整数的各个数字位置并返回新的整数
func ShuffleIntDigits(num int64) (int64, error) {
	if num < 0 {
		return 0, fmt.Errorf("number must be non-negative")
	}

	var digits []int64
	for num > 0 {
		digits = append(digits, num%10)
		num /= 10
	}

	// 如果原始数字是0，直接返回
	if len(digits) == 0 {
		return 0, nil
	}

	// 反转切片以保持原来的数字顺序
	for i, j := 0, len(digits)-1; i < j; i, j = i+1, j-1 {
		digits[i], digits[j] = digits[j], digits[i]
	}

	// 打乱数字切片
	rand.Seed(time.Now().UnixNano())
	rand.Shuffle(len(digits), func(i, j int) {
		digits[i], digits[j] = digits[j], digits[i]
	})

	// 重新组合为新的整数
	result := int64(0)
	for _, digit := range digits {
		result = result*10 + digit
	}

	return result, nil
}
