package com.njcn.gather.systemops.database.component;

import cn.hutool.core.util.StrUtil;
import com.njcn.common.utils.sm.Sm4Utils;
import org.springframework.stereotype.Component;

import java.lang.reflect.Method;

/**
 * 数据库连接密码处理组件。
 */
@Component
public class DatabasePasswordComponent {

    public String encrypt(String plainText) {
        if (StrUtil.isBlank(plainText)) {
            return null;
        }
        return new Sm4Utils(Sm4Utils.globalSecretKey).encryptData_ECB(plainText);
    }

    /**
     * 优先使用本次请求传入的临时密码；如果公共 SM4 工具存在解密能力，则复用已保存密文。
     */
    public String resolveRuntimePassword(String passwordCipher, String temporaryPassword) {
        if (StrUtil.isNotBlank(temporaryPassword)) {
            return temporaryPassword;
        }
        if (StrUtil.isBlank(passwordCipher)) {
            return null;
        }
        try {
            Sm4Utils sm4Utils = new Sm4Utils(Sm4Utils.globalSecretKey);
            Method decryptMethod = Sm4Utils.class.getMethod("decryptData_ECB", String.class);
            Object plainText = decryptMethod.invoke(sm4Utils, passwordCipher);
            if (plainText instanceof String && StrUtil.isNotBlank((String) plainText)) {
                return (String) plainText;
            }
        } catch (Exception ignored) {
            // 兼容公共工具不同版本，未找到解密方法时继续走统一失败提示。
        }
        throw new IllegalArgumentException("当前环境未确认密码解密方法，请传入临时密码执行本次操作");
    }
}
