cmake_minimum_required(VERSION 3.15)
project(deep_miner)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Compiler warnings
if(MSVC)
    add_compile_options(/W4)
else()
    add_compile_options(-Wall -Wextra -Wpedantic)
endif()

find_package(Threads REQUIRED)

# All robot + world sources (shared between game and test binaries)
set(LIB_SOURCES
    src/BaseRobot.cpp
    src/World.cpp
    src/SortBot.cpp
    src/DigDeepBot.cpp
    src/RandomBot.cpp
    src/SmartBot.cpp
    src/LookaheadBot.cpp
)

option(BUILD_GUI "Build SDL2 GUI target" OFF)

if (BUILD_GUI)
    find_package(SDL2 REQUIRED)
    find_package(SDL2_ttf REQUIRED)

    add_executable(deep_miner_gui
        ${LIB_SOURCES}
        src/Game.cpp
        src/Renderer.cpp
        main_gui.cpp
    )

    target_compile_definitions(deep_miner_gui PRIVATE WITH_SDL2_GUI)
    target_include_directories(deep_miner_gui PRIVATE include ${SDL2_INCLUDE_DIRS})
    target_link_libraries(deep_miner_gui
        Threads::Threads
        SDL2::SDL2
        SDL2_ttf::SDL2_ttf
    )
endif()

# Main game executable
add_executable(deep_miner
    ${LIB_SOURCES}
    src/Game.cpp
    main.cpp
)

target_link_libraries(deep_miner Threads::Threads)

# Test executable (no Game.cpp — tests target individual classes directly)
add_executable(deep_miner_tests
    ${LIB_SOURCES}
    tests/test_all.cpp
)

# Register with CTest so `ctest` / `cmake --build . --target test` works
enable_testing()
add_test(NAME unit_tests COMMAND deep_miner_tests)
