package com.bonus.hn.bearing.capacity.backstage.manager.config;

import com.bonus.hn.bearing.capacity.backstage.utils.Aes;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Component;

@Component
public class CustomPasswordEncoder implements PasswordEncoder {


    // 直接创建BCryptPasswordEncoder实例，无需@Autowired注入
    private final BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
    /**
     * 加密方法：注册时调用，将明文密码加密后存储到数据库
     */
    @Override
    public String encode(CharSequence rawPassword) {
        // 示例：简单加密（实际生产需用BCrypt、AES等安全算法）
        // 这里仅做演示，实际需替换为真实加密逻辑（如加盐哈希）
        return "CUSTOM(" + rawPassword + ")";
    }

    /**
     * 校验方法：登录时调用，比对用户输入密码与数据库存储的加密密码
     * @param rawPassword 用户输入的明文密码
     * @param encodedPassword 数据库中存储的加密密码
     */
    @Override
    public boolean matches(CharSequence rawPassword, String encodedPassword) {
        if (rawPassword == null || encodedPassword == null) {
            return false;
        }
        String password= Aes.aesDecrypt(rawPassword.toString());
        return passwordEncoder.matches(password, encodedPassword);
    }

    /**
     * 可选：判断是否需要重新加密（如算法升级时）
     */
    @Override
    public boolean upgradeEncoding(String encodedPassword) {
        return false;
    }
}