package com.chinaweal.aiccs.org.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.chinaweal.aiccs.org.entity.OauthAccessToken;
import com.chinaweal.aiccs.org.entity.dto.TokenRequestDTO;
import com.chinaweal.aiccs.org.entity.dto.TokenResponseDTO;

/**
 * OAuth令牌服务接口
 *
 * @author lroyia
 * @since 2025/11/21
 */
public interface IOauthAccessTokenService extends IService<OauthAccessToken> {

    /**
     * 创建访问令牌
     *
     * @param tokenRequest 令牌请求
     * @param userId 用户ID
     * @param userName 用户名
     * @return 令牌响应
     */
    TokenResponseDTO createAccessToken(TokenRequestDTO tokenRequest, String userId, String userName);

    /**
     * 刷新访问令牌
     *
     * @param refreshToken 刷新令牌
     * @param clientId 客户端ID
     * @return 令牌响应
     */
    TokenResponseDTO refreshAccessToken(String refreshToken, String clientId);

    /**
     * 撤销令牌
     *
     * @param token 令牌
     * @param tokenTypeHint 令牌类型提示
     * @return 是否成功
     */
    boolean revokeToken(String token, String tokenTypeHint);

    /**
     * 验证访问令牌
     *
     * @param accessToken 访问令牌
     * @return 令牌信息
     */
    OauthAccessToken validateAccessToken(String accessToken);

    /**
     * 根据刷新令牌获取令牌信息
     *
     * @param refreshToken 刷新令牌
     * @return 令牌信息
     */
    OauthAccessToken getAccessTokenByRefreshToken(String refreshToken);

    /**
     * 使令牌失效
     *
     * @param accessToken 访问令牌
     * @return 是否成功
     */
    boolean invalidateAccessToken(String accessToken);
}