cmake_minimum_required(VERSION 3.20)
project(UnifiedIOTest LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# Core includes
include_directories(include)

# Find spdlog and nlohmann_json
find_package(spdlog QUIET)
find_package(nlohmann_json QUIET)

# Minimal FetchContent for missing deps
if(NOT nlohmann_json_FOUND)
    include(FetchContent)
    FetchContent_Declare(nlohmann_json
        URL https://github.com/nlohmann/json/releases/download/v3.11.3/json.tar.xz
        URL_HASH SHA256=d6c65aca6b1ed68e7a182f4757257b107ae403032760ed6ef121c9d55e81757d
    )
    FetchContent_MakeAvailable(nlohmann_json)
endif()

if(NOT spdlog_FOUND)
    include(FetchContent)
    FetchContent_Declare(spdlog
        GIT_REPOSITORY https://github.com/gabime/spdlog.git
        GIT_TAG v1.12.0
    )
    FetchContent_MakeAvailable(spdlog)
endif()

# Unified IO Test
add_executable(unified-io-test
    src/test_unified_io.cpp
    src/IntraIO.cpp
    src/IntraIOManager.cpp
    src/IOFactory.cpp
)

target_link_libraries(unified-io-test
    PRIVATE nlohmann_json::nlohmann_json
    PRIVATE spdlog::spdlog
    PRIVATE pthread
)

# Client-Economy Integration Test
add_executable(client-economy-integration
    ../test_client_economy_integration.cpp
    src/IntraIO.cpp
    src/IntraIOManager.cpp
    src/IOFactory.cpp
)

target_link_libraries(client-economy-integration
    PRIVATE nlohmann_json::nlohmann_json
    PRIVATE spdlog::spdlog
    PRIVATE pthread
)

# GlobalMap Integration Test
add_executable(globalmap-integration
    ../test_globalmap_integration.cpp
    src/IntraIO.cpp
    src/IntraIOManager.cpp
    src/IOFactory.cpp
)

target_link_libraries(globalmap-integration
    PRIVATE nlohmann_json::nlohmann_json
    PRIVATE spdlog::spdlog
    PRIVATE pthread
)

# Warfactory Demo System (Backend)
add_executable(warfactory-demo
    ../warfactory_demo.cpp
    src/IntraIO.cpp
    src/IntraIOManager.cpp
    src/IOFactory.cpp
)

target_link_libraries(warfactory-demo
    PRIVATE nlohmann_json::nlohmann_json
    PRIVATE spdlog::spdlog
    PRIVATE pthread
)