package tech.easyflow.system.config;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import tech.easyflow.system.util.SysPasswordPolicy;

/**
 * 账号安全配置。
 */
@Component
@ConfigurationProperties(prefix = "easyflow.security.account")
public class AccountSecurityProperties implements InitializingBean {

    /**
     * 账号重置和导入时使用的默认强密码。
     */
    private String defaultResetPassword = "!QAZ2wsx";

    /**
     * 是否允许同一账号同时在多个客户端登录。
     */
    private boolean multiLogin = false;

    /**
     * 获取默认重置密码。
     *
     * @return 默认重置密码
     */
    public String getDefaultResetPassword() {
        return defaultResetPassword;
    }

    /**
     * 设置默认重置密码。
     *
     * @param defaultResetPassword 默认重置密码
     */
    public void setDefaultResetPassword(String defaultResetPassword) {
        this.defaultResetPassword = defaultResetPassword;
    }

    /**
     * 判断是否允许同一账号同时在多个客户端登录。
     *
     * @return 允许多端登录时返回 true
     */
    public boolean isMultiLogin() {
        return multiLogin;
    }

    /**
     * 设置是否允许同一账号同时在多个客户端登录。
     *
     * @param multiLogin 是否允许多端登录
     */
    public void setMultiLogin(boolean multiLogin) {
        this.multiLogin = multiLogin;
    }

    /**
     * 应用启动时校验默认密码符合系统强密码策略。
     */
    @Override
    public void afterPropertiesSet() {
        SysPasswordPolicy.validateStrongPassword(
                defaultResetPassword == null ? null : defaultResetPassword.trim()
        );
        defaultResetPassword = defaultResetPassword.trim();
    }
}
