package org.xyzh.api.auth.service;

import org.xyzh.common.core.domain.LoginDomain;
import org.xyzh.common.core.domain.LoginParam;
import org.xyzh.common.core.domain.ResultDomain;

/**
 * @description    认证服务接口
 * @filename    AuthService.java
 * @author    yslg
 * @copyright yslg
 * @since 2025-11-03
 */
public interface AuthService {

    /**
     * @description    登录（用于Dubbo远程调用，clientIp需提前设置到loginParam中）
     * @param    LoginParam    loginParam    登录参数（包含clientIp）
     * @return    ResultDomain<LoginDomain>    登录结果
     * @author    yslg
     * @since 2025-11-03
     */
    ResultDomain<LoginDomain> login(LoginParam loginParam);

    /**
     * @description    刷新token
     * @param    token    当前token
     * @param    clientIp    客户端IP
     * @return    ResultDomain<LoginDomain>    刷新token结果
     * @author    yslg
     * @since 2025-11-03
     */
    ResultDomain<LoginDomain> refreshToken(String token, String clientIp);

    /**
     * @description    登出
     * @param    token    当前token
     * @return    ResultDomain<LoginDomain>    登出结果
     * @author    yslg
     * @since 2025-11-03
     */
    ResultDomain<LoginDomain> logout(String token);

    /**
     * @description    根据验证码类型获取验证码
     * @param    LoginParam    loginParam    登录参数
     * @return    ResultDomain<LoginDomain>    获取验证码结果
     * @author    yslg
     * @since 2025-11-03
     */
    ResultDomain<LoginDomain> getCaptcha(LoginParam loginParam);

    /**
     * @description    根据 token 获取登录信息，供其他服务调用以判定用户登录状态
     * @param    token    鉴权 token（例如 JWT 或会话 token）
     * @return    ResultDomain<LoginDomain>    登录信息，若 token 无效或未登录则在 ResultDomain 中返回相应状态/错误
     * @author    yslg
     * @since 2025-11-03
     */
    ResultDomain<LoginDomain> getLoginByToken(String token);

    /**
     * @description    简单校验 token 是否有效（用于快速判断是否已登录）
     * @param    token    鉴权 token
     * @return    ResultDomain<Boolean>    true 表示有效/已登录，false 表示无效/未登录
     * @author    yslg
     * @since 2025-11-03
     */
    ResultDomain<Boolean> isTokenValid(String token);

    
}
