package org.xyzh.auth.strategy;

import org.xyzh.api.system.vo.SysUserVO;
import org.xyzh.common.core.domain.LoginParam;
import org.xyzh.common.dto.sys.TbSysUserDTO;

/**
 * @description    LoginStrategy.java文件描述 登录策略接口
 * @filename    LoginStrategy.java
 * @author    yslg
 * @copyright xyzh
 * @since 2025-12-05
 */
public interface LoginStrategy {

    /**
     * @description    支持的登录类型
     * @return    String 登录类型
     * @author    yslg
     * @since 2025-12-05
     */
    String getLoginType();

    /**
     * @description    验证登录参数
     * @param    loginParam 登录参数
     * @return    boolean 是否有效
     * @author    yslg
     * @since 2025-12-05
     */
    boolean validate(LoginParam loginParam);

    /**
     * @description    根据登录参数查找用户
     * @param    loginParam 登录参数
     * @return    TbSysUser 用户对象
     * @author    yslg
     * @since 2025-12-05
     */
    SysUserVO findUser(LoginParam loginParam);

    /**
     * @description    验证凭据（密码或验证码）
     * @param    inputCredential 输入凭据（密码或验证码）
     * @param    storedCredential 存储凭据（密码或验证码）
     * @return    boolean 是否匹配
     * @author    yslg
     * @since 2025-12-05
     */
    boolean verifyCredential(String inputCredential, String storedCredential);

    /**
     * @description    验证验证码（从Redis获取并验证SessionID）
     * @param    loginParam 登录参数
     * @return    boolean 是否验证成功
     * @author    yslg
     * @since 2025-12-05
     */
    default boolean verifyCaptchaWithSession(LoginParam loginParam) {
        // 默认实现：不支持验证码登录
        return false;
    }
}