package org.xyzh.auth.strategy;

import org.xyzh.common.core.domain.LoginParam;
import org.xyzh.common.dto.user.TbSysUser;

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

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

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

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

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