package com.huimv.employment.service.config;

import org.springframework.boot.context.properties.ConfigurationProperties;

/**
 * 安全相关配置，绑定 {@code fe.security.*} 配置项。
 * <p>
 * 包含 JWT 签名密钥、Token 有效期、手机号 AES 加密密钥等，
 * 生产环境敏感项应通过环境变量注入，勿使用默认值。
 * </p>
 */
@ConfigurationProperties(prefix = "fe.security")
public class SecurityProperties {

    /**
     * JWT 签名密钥（HMAC-SHA256）。
     * 环境变量：FE_JWT_SECRET。生产环境请使用至少 32 字符的随机字符串。
     */
    private String jwtSecret = "change-me";

    /** JWT 有效期（秒），默认 7200（2 小时） */
    private long jwtExpireSeconds = 7200;

    /**
     * 手机号 AES 加密密钥，用于 fe_user.mobile_enc 字段加解密。
     * 环境变量：FE_MOBILE_AES_KEY。密钥变更会导致已有密文无法解密，请谨慎轮换。
     */
    private String mobileAesKey = "change-me-mobile";

    /**
     * 密码 RSA 公钥（PKCS#8/X509 Base64，不含 PEM 头尾亦可）。
     * 前端 JSEncrypt 加密密码后传输，后端用私钥解密再 BCrypt 入库。
     */
    private String passwordRsaPublicKey = "";

    /** 密码 RSA 私钥（PKCS#8 Base64） */
    private String passwordRsaPrivateKey = "";

    /** 账密连续失败锁定阈值 */
    private int passwordMaxFailures = 5;

    /** 账密锁定时长（分钟） */
    private int passwordLockMinutes = 15;

    public String getJwtSecret() {
        return jwtSecret;
    }

    public void setJwtSecret(String jwtSecret) {
        this.jwtSecret = jwtSecret;
    }

    public long getJwtExpireSeconds() {
        return jwtExpireSeconds;
    }

    public void setJwtExpireSeconds(long jwtExpireSeconds) {
        this.jwtExpireSeconds = jwtExpireSeconds;
    }

    public String getMobileAesKey() {
        return mobileAesKey;
    }

    public void setMobileAesKey(String mobileAesKey) {
        this.mobileAesKey = mobileAesKey;
    }

    public String getPasswordRsaPublicKey() {
        return passwordRsaPublicKey;
    }

    public void setPasswordRsaPublicKey(String passwordRsaPublicKey) {
        this.passwordRsaPublicKey = passwordRsaPublicKey;
    }

    public String getPasswordRsaPrivateKey() {
        return passwordRsaPrivateKey;
    }

    public void setPasswordRsaPrivateKey(String passwordRsaPrivateKey) {
        this.passwordRsaPrivateKey = passwordRsaPrivateKey;
    }

    public int getPasswordMaxFailures() {
        return passwordMaxFailures;
    }

    public void setPasswordMaxFailures(int passwordMaxFailures) {
        this.passwordMaxFailures = passwordMaxFailures;
    }

    public int getPasswordLockMinutes() {
        return passwordLockMinutes;
    }

    public void setPasswordLockMinutes(int passwordLockMinutes) {
        this.passwordLockMinutes = passwordLockMinutes;
    }
}
