package com.sckw.auth.service;

import com.sckw.auth.model.vo.req.*;
import com.sckw.auth.model.vo.res.LoginResVo1;
import com.sckw.core.web.response.HttpResult;

/**
 * @desc: 登录
 * @author: czh
 * @date: 2023/6/19
 */
public interface IAuthService {

    /**
     * @param loginBase {}
     * @desc 登陆
     * @author zk
     * @date 2023/7/26
     **/
    HttpResult login(LoginBase loginBase);


    /**
     * @param reqVo 注册入参
     * @desc: 用户注册
     * @author: czh
     * @date: 2023/6/16
     */
//    void register(RegisterReqVo reqVo);

    /**
     * @param reqDto 忘记密码入参
     * @desc: 忘记密码
     * @author: czh
     * @date: 2023/6/19
     */
    void forgetPassword(ForgetPasswordReqVo reqDto);

    /**
     * @param id 用户id
     * @desc: 重置密码
     * @author: czh
     * @date: 2023/7/3
     */
    void resetPassword(Long id);

    /**
     * @return LoginResVo1
     * @desc: 根据token获取登录信息
     * @author: czh
     * @date: 2023/9/27
     */
    LoginResVo1 getLoginResByToken(String clientType, String token);

    HttpResult changeRole(RoleChangeVo reqVo);

    /**
     * @param refreshToken 刷新令牌
     * @param clientType   客户端类型
     * @param systemType   系统类型
     * @param deviceId     设备标识
     * @return HttpResult
     * @desc: 刷新Token（记住密码时使用，支持多设备）
     * @date: 2026/1/14
     */
    HttpResult refreshToken(String refreshToken, String clientType, Integer systemType, String deviceId);

    /**
     * @param targetRefreshToken 目标账号的刷新令牌
     * @param clientType         客户端类型
     * @param systemType         系统类型
     * @param deviceId           设备标识
     * @return HttpResult
     * @desc: 切换账号（使用目标账号的refreshToken快速登录）
     * @date: 2026/1/14
     */
    HttpResult switchAccount(String targetRefreshToken, String clientType, Integer systemType, String deviceId);
}
