package com.sonic.pigeon.utils;

/**
 * 基于用户ID生成动态盐值的工具类
 */
public class UserSaltGenerator {
    
    private static final String BASE_SALT = "LMiopk7%^TUGhRCUYV089ioHI87gBF76";
    
    /**
     * 根据用户ID生成动态盐值
     * @param accountId 用户ID
     * @return 基于用户ID生成的盐值
     */
    public static String generateSaltByUserId(String accountId) {
        if (accountId == null) {
            throw new IllegalArgumentException("用户ID不能为空");
        }
        
        // 将用户ID与基础盐值结合，然后进行位运算和字符串操作生成动态盐值
        String userIdStr = accountId;
        int userIdHash = userIdStr.hashCode();
        
        // 使用用户ID的哈希值和基础盐值生成动态盐值
        StringBuilder dynamicSalt = new StringBuilder();
        
        // 取用户ID哈希值的某些位作为偏移量
        int offset = Math.abs(userIdHash) % BASE_SALT.length();
        
        // 循环处理基础盐值，生成动态盐值
        for (int i = 0; i < BASE_SALT.length(); i++) {
            int index = (i + offset) % BASE_SALT.length();
            char saltChar = BASE_SALT.charAt(index);
            
            // 结合用户ID的数字特征进一步混淆
            int userIdDigit = Character.getNumericValue(userIdStr.charAt(i % userIdStr.length()));
            char mixedChar = (char) (saltChar ^ (userIdDigit + i) % 256);
            
            dynamicSalt.append(mixedChar);
        }
        
        return dynamicSalt.toString();
    }

}
