package com.ruoyi.common.utils.uuid;

import com.ruoyi.common.utils.SnowFlakeUtil;

/**
 * ID生成器工具类
 *
 * @author ruoyi
 */
public class IdUtils
{
    /**
     * 获取随机UUID
     *
     * @return 随机UUID
     */
    public static String randomUUID()
    {
        return UUID.randomUUID().toString();
    }

    /**
     * 获取随机UUID(去“-")
     *
     * @return 随机UUID
     */
    public static String randomUUID2()
    {
        return UUID.randomUUID().toString().replace("-", "");
    }

    /**
     * 简化的UUID，去掉了横线
     *
     * @return 简化的UUID，去掉了横线
     */
    public static String simpleUUID()
    {
        return UUID.randomUUID().toString(true);
    }

    /**
     * 获取随机UUID，使用性能更好的ThreadLocalRandom生成UUID
     *
     * @return 随机UUID
     */
    public static String fastUUID()
    {
        return UUID.fastUUID().toString();
    }

    /**
     * 简化的UUID，去掉了横线，使用性能更好的ThreadLocalRandom生成UUID
     *
     * @return 简化的UUID，去掉了横线
     */
    public static String fastSimpleUUID()
    {
        return UUID.fastUUID().toString(true);
    }

    /**
     * 根据指定的位数返回随机UUID字符串（去掉了短划线）
     *
     * @param digitCount 需要的字符串位数
     * @return 指定位数的随机UUID字符串片段
     */
    public static String randomUUIDByDigit(int digitCount) {
        if (digitCount <= 0 || digitCount > 32) {
            throw new IllegalArgumentException("数字数必须在1到32之间。");
        }

        // 生成UUID
        UUID uuid = UUID.randomUUID();
        String uuidStr = uuid.toString().replace("-", ""); // 移除短划线

        // 根据需要的位数截取UUID字符串
        int startIndex = (uuidStr.length() - digitCount) / 2; // 确保从中间开始截取以保持一定随机性

        return uuidStr.substring(startIndex, startIndex + digitCount);
    }

    /**
     * 订单号生成
     * @param payType String 支付类型
     * @return 生成的随机码
     */
    public static String getOrderNo(String payType){
        return payType + SnowFlakeUtil.newId();
    }

    /**
     * 根据长度生成随机数字
     * @param start 起始数字
     * @param end 结束数字
     * @return 生成的随机码
     */
    public static Integer randomCount(Integer start, Integer end){
        return (int)(Math.random()*(end - start +1) + start);
    }

}
