package com.luojia_channel.common.utils;

import com.alibaba.ttl.TransmittableThreadLocal;
import com.luojia_channel.common.domain.UserDTO;

import java.util.Optional;

// 用户上下文
public final class UserContext {

    private static final ThreadLocal<UserDTO> USER_THREAD_LOCAL = new TransmittableThreadLocal<>();
    public static void setUser(UserDTO user) {
        USER_THREAD_LOCAL.set(user);
    }

    public static Long getUserId() {
        UserDTO userInfoDTO = USER_THREAD_LOCAL.get();
        return Optional.ofNullable(userInfoDTO).map(UserDTO::getUserId).orElse(null);
    }


    public static String getUsername() {
        UserDTO userInfoDTO = USER_THREAD_LOCAL.get();
        return Optional.ofNullable(userInfoDTO).map(UserDTO::getUsername).orElse(null);
    }


    public static String getAccessToken() {
        UserDTO userInfoDTO = USER_THREAD_LOCAL.get();
        return Optional.ofNullable(userInfoDTO).map(UserDTO::getAccessToken).orElse(null);
    }

    public static String getRefreshToken() {
        UserDTO userInfoDTO = USER_THREAD_LOCAL.get();
        return Optional.ofNullable(userInfoDTO).map(UserDTO::getRefreshToken).orElse(null);
    }

    public static void removeUser() {
        USER_THREAD_LOCAL.remove();
    }
}
