package cn.reghao.tnb.account.app.service;

import cn.reghao.tnb.account.api.dto.AccountInfo;
import cn.reghao.tnb.account.app.model.dto.AccountToken;
import cn.reghao.tnb.account.app.security.form.AccountAuthToken;

/**
 * @author reghao
 * @date 2023-02-16 14:57:49
 */
public interface AccountTokenService {
    AccountInfo getAccountInfo(int tokenType, String userdata);
    AccountAuthToken getAuthedToken();
    /**
     * 从 cookie 或 token 中读取已认证用户的 AccountAuthToken
     *
     * @param
     * @return
     * @date 2023-10-19 18:38:43
     */
    AccountAuthToken getAuthToken(int tokenType, String userdata);
    /**
     * 使用刷新令牌颁发新令牌
     *
     * @param
     * @return
     * @date 2023-10-20 09:44:55
     */
    AccountToken getUserToken(String refreshToken) throws Exception;

    /**
     * 颁发用户令牌
     *
     * @param
     * @return
     * @date 2023-02-17 14:29:32
     */
    AccountToken grantUserToken(AccountAuthToken authToken);
    void setCookie(AccountAuthToken authToken, long timeout);
    void clearCookie();

    /**
     * 删除与与用户关联的所有设备的登录数据
     *
     * @param
     * @return
     * @date 2023-02-20 14:30:44
     */
    void logout(long userId);
    void logout(String loginId);
    void logout();
    void deleteOnSessionExpired(String loginId);
}
