package top.continew.admin.auth.service;

import jakarta.servlet.http.HttpServletRequest;
import me.zhyd.oauth.model.AuthUser;
import top.continew.admin.auth.model.req.EmailRegisterReq;
import top.continew.admin.auth.model.req.PhoneRegisterReq;
import top.continew.admin.auth.model.req.UserRegisterReq;
import top.continew.admin.auth.model.resp.RouteResp;
import top.continew.admin.common.model.dto.LoginUser;

import java.util.List;

/**
 * 登录业务接口
 *
 * @author Charles7c
 * @since 2022/12/21 21:48
 */
public interface LoginService {

    /**
     * 账号登录
     *
     * @param username 用户名
     * @param password 密码
     * @param request  请求对象
     * @return 令牌
     */
    LoginUser accountLogin(String username, String password, HttpServletRequest request);

    /**
     * 手机号登录
     *
     * @param phone 手机号
     * @return 令牌
     */
    LoginUser phoneLogin(String phone);

    /**
     * 邮箱登录
     *
     * @param email 邮箱
     * @return 令牌
     */
    LoginUser emailLogin(String email);

    /**
     * 三方账号登录
     *
     * @param authUser 三方账号信息
     * @return 令牌
     */
    LoginUser socialLogin(AuthUser authUser);

    /**
     * 构建路由树
     *
     * @param userId 用户 ID
     * @return 路由树
     */
    List<RouteResp> buildRouteTree(Long userId);

    /**
     * 简单登录
     *
     * @param userId 用户id
     * @return LoginUser
     */
    LoginUser simpleLogin(Long userId);

    /**
     * 用户名密码注册
     *
     * @param registerReq 注册信息
     * @param request     请求对象
     * @return 登录用户信息
     */
    LoginUser userRegister(UserRegisterReq registerReq, HttpServletRequest request);

    /**
     * 手机号注册
     *
     * @param registerReq 注册信息
     * @param request     请求对象
     * @return 登录用户信息
     */
    LoginUser phoneRegister(PhoneRegisterReq registerReq, HttpServletRequest request);

    /**
     * 邮箱注册
     *
     * @param registerReq 注册信息
     * @param request     请求对象
     * @return 登录用户信息
     */
    LoginUser emailRegister(EmailRegisterReq registerReq, HttpServletRequest request);

}
