package kr.lunaticbum.back.lun.configs

import kr.lunaticbum.back.lun.model.User
import kr.lunaticbum.back.lun.model.UserManager // UserManager가 있는 패키지 import (확인 필요)
import org.springframework.beans.factory.annotation.Value
import org.springframework.security.core.annotation.AuthenticationPrincipal
import org.springframework.security.core.userdetails.UserDetails
import org.springframework.web.bind.annotation.ControllerAdvice
import org.springframework.web.bind.annotation.ModelAttribute
import reactor.core.publisher.Mono

@ControllerAdvice
class GlobalControllerAdvice(
    private val userManager: UserManager // [추가] 유저 정보를 조회하기 위해 주입
) {

    @Value("\${api.base-url}")
    private lateinit var apiBaseUrl: String

    @ModelAttribute("apiBaseUrl")
    fun addApiBaseUrlToModel(): String {
        return apiBaseUrl
    }

    // [추가] 로그인한 경우, User 엔티티(테마 정보 포함)를 모델에 "user"라는 이름으로 추가
//    @ModelAttribute("user")
//    fun addUserToModel(@AuthenticationPrincipal userDetails: UserDetails?): Mono<User> {
//        return if (userDetails != null) {
//            userManager.findById(userDetails.username)
//        } else {
//            Mono.empty()
//        }
//    }

    @ModelAttribute("user")
    fun currentUser(@AuthenticationPrincipal userDetails: UserDetails?): User? {
        if (userDetails == null) return null

        // [수정] Mono 객체를 그대로 반환하지 말고 .block()을 통해 실제 객체를 반환해야 합니다.
        return userManager.findById(userDetails.username).block()
    }
}