package com.pingcap.community.blogserver.util;

import com.pingcap.community.blogserver.entity.User;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import java.util.Optional;

public class ContextUtils {

  public static Optional<User> getCurrentUser() {
    return Optional.ofNullable(SecurityContextHolder.getContext())
      .map(SecurityContext::getAuthentication)
      .filter(Authentication::isAuthenticated)
      .map(Authentication::getPrincipal)
      .filter((u) -> u instanceof User)
      .map(User.class::cast);
  }

  public static Optional<Long> getCurrentUserId() {
    return getCurrentUser().map(User::getId);
  }

  public static Optional<String> getSessionID() {
    ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
    return Optional.ofNullable(attributes).map(ServletRequestAttributes::getSessionId);
  }
}
