set(RL_TOOLS_HYPERLUX_ENABLE_SPY OFF PARENT_SCOPE)
set(RL_TOOLS_HYPERLUX_SPY_GLFW OFF PARENT_SCOPE)
if(RL_TOOLS_HYPERLUX_DISABLE_SPY)
    return()
endif()
if(NOT RL_TOOLS_ENABLE_HYPERLUX)
    set(RL_TOOLS_SUMMARY_HYPERLUX_SPY_REASON "HyperLux unavailable" PARENT_SCOPE)
    return()
endif()

set(RL_TOOLS_IMGUI_VERSION 1.92.9b)
find_package(glfw3 QUIET)
find_package(OpenGL QUIET)
find_package(Git QUIET)
set(RL_TOOLS_HYPERLUX_SPY_GLFW OFF)
if(NOT TARGET glfw OR NOT TARGET OpenGL::GL)
    set(RL_TOOLS_HYPERLUX_SPY_WINDOW_SUMMARY "no window: GLFW/OpenGL not found (e.g. apt install libglfw3-dev libgl1-mesa-dev)")
elseif(NOT ((GIT_FOUND AND NOT RL_TOOLS_OFFLINE_BUILD) OR EXISTS "${FETCHCONTENT_BASE_DIR}/imgui-src" OR FETCHCONTENT_SOURCE_DIR_IMGUI))
    set(RL_TOOLS_HYPERLUX_SPY_WINDOW_SUMMARY "no window: cannot fetch Dear ImGui (offline/no git)")
else()
    set(RL_TOOLS_HYPERLUX_SPY_GLFW ON)
    set(RL_TOOLS_HYPERLUX_SPY_WINDOW_SUMMARY "window: GLFW/OpenGL, Dear ImGui ${RL_TOOLS_IMGUI_VERSION} via FetchContent")
endif()
set(RL_TOOLS_HYPERLUX_SPY_KITTY OFF)
if(RL_TOOLS_ENABLE_ZLIB AND UNIX)
    set(RL_TOOLS_HYPERLUX_SPY_KITTY ON)
    set(RL_TOOLS_HYPERLUX_SPY_KITTY_SUMMARY "kitty terminal")
else()
    set(RL_TOOLS_HYPERLUX_SPY_KITTY_SUMMARY "no kitty terminal: needs zlib on a POSIX system")
endif()
if(NOT RL_TOOLS_HYPERLUX_SPY_GLFW AND NOT RL_TOOLS_HYPERLUX_SPY_KITTY)
    set(RL_TOOLS_SUMMARY_HYPERLUX_SPY_REASON "${RL_TOOLS_HYPERLUX_SPY_WINDOW_SUMMARY}; ${RL_TOOLS_HYPERLUX_SPY_KITTY_SUMMARY}" PARENT_SCOPE)
    return()
endif()

find_package(Threads REQUIRED)
add_library(rl_tools_hyperlux_spy SHARED ui.cpp)
add_library(RLtools::HyperLuxSpy ALIAS rl_tools_hyperlux_spy)
target_link_libraries(rl_tools_hyperlux_spy PUBLIC RLtools::Core Threads::Threads)
target_compile_definitions(rl_tools_hyperlux_spy PUBLIC RL_TOOLS_HYPERLUX_ENABLE_SPY=1)
set_target_properties(rl_tools_hyperlux_spy PROPERTIES CXX_STANDARD 17 CXX_STANDARD_REQUIRED ON WINDOWS_EXPORT_ALL_SYMBOLS ON)
if(RL_TOOLS_HYPERLUX_SPY_GLFW)
    FetchContent_Declare(imgui
        GIT_REPOSITORY https://github.com/ocornut/imgui.git
        GIT_TAG        v${RL_TOOLS_IMGUI_VERSION}
        GIT_SHALLOW    TRUE
    )
    rl_tools_fetchcontent_makeavailable_quiet(imgui)
    target_sources(rl_tools_hyperlux_spy PRIVATE ui_glfw.cpp "${imgui_SOURCE_DIR}/imgui.cpp" "${imgui_SOURCE_DIR}/imgui_draw.cpp" "${imgui_SOURCE_DIR}/imgui_tables.cpp" "${imgui_SOURCE_DIR}/imgui_widgets.cpp" "${imgui_SOURCE_DIR}/backends/imgui_impl_glfw.cpp" "${imgui_SOURCE_DIR}/backends/imgui_impl_opengl3.cpp")
    target_link_libraries(rl_tools_hyperlux_spy PRIVATE glfw OpenGL::GL ${CMAKE_DL_LIBS})
    target_include_directories(rl_tools_hyperlux_spy SYSTEM PRIVATE "${imgui_SOURCE_DIR}" "${imgui_SOURCE_DIR}/backends")
    target_compile_definitions(rl_tools_hyperlux_spy PRIVATE RL_TOOLS_HYPERLUX_SPY_ENABLE_GLFW)
endif()
if(RL_TOOLS_HYPERLUX_SPY_KITTY)
    target_sources(rl_tools_hyperlux_spy PRIVATE ui_kitty.cpp)
    target_link_libraries(rl_tools_hyperlux_spy PRIVATE ${RL_TOOLS_ZLIB_TARGET})
    target_compile_definitions(rl_tools_hyperlux_spy PRIVATE RL_TOOLS_HYPERLUX_SPY_ENABLE_KITTY)
endif()
set(RL_TOOLS_HYPERLUX_ENABLE_SPY ON PARENT_SCOPE)
set(RL_TOOLS_HYPERLUX_SPY_GLFW ${RL_TOOLS_HYPERLUX_SPY_GLFW} PARENT_SCOPE)
set(RL_TOOLS_SUMMARY_HYPERLUX_SPY_REASON "${RL_TOOLS_HYPERLUX_SPY_WINDOW_SUMMARY}; ${RL_TOOLS_HYPERLUX_SPY_KITTY_SUMMARY}" PARENT_SCOPE)
