cmake_minimum_required(VERSION 3.16)
project(drharness LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

find_package(CURL REQUIRED)
find_package(nlohmann_json REQUIRED)

set(TOOL_SOURCES
    tools/shell_tool.cpp
    tools/agent_tool.cpp
    tools/edit_tool.cpp
    tools/file_list_tool.cpp
    tools/file_read_tool.cpp
    tools/grep_tool.cpp
)

if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
    list(REMOVE_ITEM TOOL_SOURCES tools/shell_tool.cpp)
    set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++")
    set(CMAKE_SHARED_LINKER_FLAGS "-static-libgcc -static-libstdc++")
endif()

add_library(drharness_lib
    src/tool_registry.cpp
    src/ollama_client.cpp
    src/harness.cpp
    src/debug_client.cpp
    src/editor.cpp
    ${TOOL_SOURCES}
)
target_include_directories(drharness_lib PUBLIC include tools)
target_link_libraries(drharness_lib
    PUBLIC  nlohmann_json::nlohmann_json
    PRIVATE CURL::libcurl
)
target_compile_options(drharness_lib PRIVATE -Wall -Wextra -Wpedantic)

add_executable(drharness src/main.cpp)
target_link_libraries(drharness PRIVATE drharness_lib)

install(TARGETS drharness DESTINATION bin)

# Add testing support
enable_testing()
add_subdirectory(tests)
