package com.ruoyi.logistics.util;


import java.security.SecureRandom;

/**
 * 密码生成工具类
 * 生成 8 位高强度随机密码：默认包含 大写字母+小写字母+数字
 */
public class PasswordUtils {

    // 字符池：大写字母
    private static final String UPPER = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    // 字符池：小写字母
    private static final String LOWER = "abcdefghijklmnopqrstuvwxyz";
    // 字符池：数字
    private static final String DIGITS = "0123456789";
    // 字符池：特殊符号（可选）
    private static final String SPECIAL = "!@#$%^&*_+-=?";

    // 安全随机数（比 Random 更安全）
    private static final SecureRandom RANDOM = new SecureRandom();

    /**
     * 生成 8 位随机密码（大小写+数字，最常用）
     */
    public static String generate8Password() {
        // 组合字符池
        String allChars = UPPER + LOWER + DIGITS;
        return generateRandomPassword(8, allChars);
    }

    /**
     * 生成 8 位随机密码（包含特殊符号，强度更高）
     */
    public static String generate8PasswordWithSpecial() {
        String allChars = UPPER + LOWER + DIGITS + SPECIAL;
        return generateRandomPassword(8, allChars);
    }

    /**
     * 通用密码生成方法
     * @param length 密码长度
     * @param chars 字符池
     * @return 随机密码
     */
    private static String generateRandomPassword(int length, String chars) {
        if (length <= 0 || chars.isEmpty()) {
            throw new IllegalArgumentException("参数不合法");
        }

        StringBuilder password = new StringBuilder(length);
        for (int i = 0; i < length; i++) {
            int index = RANDOM.nextInt(chars.length());
            password.append(chars.charAt(index));
        }
        return password.toString();
    }


}
