package com.ruoyi.jarvis.service;

import com.ruoyi.jarvis.domain.dto.WPS365TokenInfo;

/**
 * WPS365 OAuth授权服务接口
 * 
 * @author system
 */
public interface IWPS365OAuthService {
    
    /**
     * 获取授权URL
     * 
     * @param state 状态参数（可选，用于防止CSRF攻击）
     * @return 授权URL
     */
    String getAuthUrl(String state);
    
    /**
     * 通过授权码获取访问令牌
     * 
     * @param code 授权码
     * @return Token信息
     */
    WPS365TokenInfo getAccessTokenByCode(String code);
    
    /**
     * 刷新访问令牌
     * 
     * @param refreshToken 刷新令牌
     * @return 新的Token信息
     */
    WPS365TokenInfo refreshAccessToken(String refreshToken);
    
    /**
     * 获取当前用户的访问令牌
     * 
     * @return Token信息，如果未授权则返回null
     */
    WPS365TokenInfo getCurrentToken();
    
    /**
     * 保存用户令牌信息
     * 
     * @param userId 用户ID
     * @param tokenInfo Token信息
     */
    void saveToken(String userId, WPS365TokenInfo tokenInfo);
    
    /**
     * 清除用户令牌信息
     * 
     * @param userId 用户ID
     */
    void clearToken(String userId);
    
    /**
     * 检查令牌是否有效
     * 
     * @param tokenInfo Token信息
     * @return true表示有效，false表示需要刷新或重新授权
     */
    boolean isTokenValid(WPS365TokenInfo tokenInfo);
}

