package com.bio.bio_backend.global.utils;

import com.bio.bio_backend.domain.base.member.dto.MemberDto;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;

@Slf4j
@Component
public class SecurityUtils {

    /**
     * 현재 인증된 사용자의 Authentication 객체를 반환합니다.
     * @return Authentication 객체
     */
    public static Authentication getCurrentAuthentication() {
        return SecurityContextHolder.getContext().getAuthentication();
    }

    /**
     * 현재 인증된 사용자의 MemberDto를 반환합니다.
     * @return MemberDto 객체
     */
    public static MemberDto getCurrentMember() {
        Authentication authentication = getCurrentAuthentication();
        if (authentication != null && authentication.getPrincipal() instanceof MemberDto) {
            return (MemberDto) authentication.getPrincipal();
        }
        return null;
    }

    /**
     * 현재 인증된 사용자의 userId를 반환합니다.
     * @return userId 문자열
     */
    public static String getCurrentUserId() {
        MemberDto member = getCurrentMember();
        return member != null ? member.getUserId() : null;
    }

    /**
     * 현재 인증된 사용자의 oid를 반환합니다.
     * @return oid Long 값
     */
    public static Long getCurrentUserOid() {
        MemberDto member = getCurrentMember();
        return member != null ? member.getOid() : null;
    }

    /**
     * 현재 인증된 사용자가 로그인되어 있는지 확인합니다.
     * @return 로그인 여부
     */
    public static boolean isAuthenticated() {
        Authentication authentication = getCurrentAuthentication();
        return authentication != null && authentication.isAuthenticated();
    }


}
