package com.bonus.auth.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 该类用于从 `application.yml` 中加载密码策略的配置项。
 * 使用 @ConfigurationProperties 注解，前缀为 password-policy。
 * @author bonus
 */
@Component
@ConfigurationProperties(prefix = "password-policy")
@Data
public class PasswordPolicyConfig {

    // 密码的最小长度
    private int minLength;

    // 密码的最大长度
    private int maxLength;

    // 是否需要包含大写字母
    private boolean requireUpperCase;

    // 是否需要包含小写字母
    private boolean requireLowerCase;

    // 是否需要包含数字
    private boolean requireDigit;

    // 是否需要包含特殊字符
    private boolean requireSpecialChar;

    // 常见的弱密码列表，禁止使用这些密码
    private List<String> weakPasswords;

    // 密码历史记录限制
    private int passwordHistoryLimit;

    // 是否限制连续相同字符
    private boolean restrictConsecutiveChars;

    // 最大允许的连续字符数
    private int maxConsecutiveChars;

    // 密码中是否不能包含用户名
    private boolean excludeUsernameInPassword;

    // 是否在首次登录时强制修改密码
    private boolean forcePasswordChangeOnFirstLogin;
}
