package cn.nianxx.thhotel.platform.identity.service;

import cn.nianxx.thhotel.platform.identity.common.request.AuthLoginRequest;
import cn.nianxx.thhotel.platform.identity.common.result.AuthLoginResult;
import cn.nianxx.thhotel.platform.identity.common.result.AuthLogoutResult;
import cn.nianxx.thhotel.platform.identity.common.result.AuthMeResult;
import cn.nianxx.thhotel.platform.security.common.dto.AuthenticatedUserContext;
import jakarta.servlet.http.HttpServletRequest;
import java.util.Optional;

/**
 * 登录认证服务。负责用户名密码登录、登出、当前用户上下文和可选 Bearer token 解析。
 */
public interface AuthService {

    /**
     * 用户名密码登录，成功后签发数据库 session token。
     */
    AuthLoginResult login(AuthLoginRequest request, HttpServletRequest servletRequest);

    /**
     * 查询当前登录用户上下文，缺少或无效 token 时返回受控 401。
     */
    AuthMeResult currentUser(String authorizationHeader);

    /**
     * 撤销当前 token 对应 session。
     */
    AuthLogoutResult logout(String authorizationHeader);

    /**
     * 可选解析 Bearer token，供过滤器注入上下文；无 token 或无效 token 不抛业务异常。
     */
    Optional<AuthenticatedUserContext> resolveOptionalContext(String authorizationHeader);
}
