package com.bonus.system.service;

import com.bonus.common.core.web.domain.AjaxResult;
import com.bonus.system.domain.UserPasswordHistory;

/**
 * 密码校验器接口类，用于根据配置对用户输入的密码进行验证。
 * 提供对新密码的校验、首次登录检测、定期密码修改功能。
 *
 * @author bonus
 */
public interface PasswordValidatorService {

    /**
     * 对新密码进行校验，返回 AjaxResult 表示密码是否符合要求。
     *
     * @param username     用户名，不能包含在密码中
     * @param oldPassword  旧密码
     * @param newPassword  新密码
     * @return 如果密码符合策略要求，则返回 AjaxResult 对象
     */
    AjaxResult validatePassword(Long userId, String username, String oldPassword, String newPassword);

    /**
     * 检查用户是否是首次登录。
     *
     * @return 如果是首次登录，返回 AjaxResult 提示用户修改密码，否则返回错误信息
     */
    boolean checkFirstLogin();

    /**
     * 检查用户密码是否已过期，提示用户定期修改密码。
     *
     * @return 如果需要修改密码，返回 AjaxResult 提示用户修改，否则返回成功信息
     */
    boolean checkPasswordExpiry();

    /**
     * 检查新密码是否在最近五次修改的密码中
     *
     * @param userId      用户ID
     * @param newPassword 新密码
     * @return 如果新密码在最近的五次修改记录中，返回 true，否则返回 false
     */
    AjaxResult isPasswordInRecentHistory(Long userId, String newPassword);

    int addPasswordExpiry(UserPasswordHistory userPasswordHistory);
}
