
include(FetchContent)

find_package(nlohmann_json CONFIG QUIET)
if (NOT nlohmann_json_FOUND)
  FetchContent_Declare(
    json
    GIT_REPOSITORY https://github.com/nlohmann/json.git
    GIT_TAG "v${NLOHMANN_JSON_VERSION}"
    FIND_PACKAGE_ARGS CONFIG
  )
  FetchContent_MakeAvailable(json)
endif()

find_package(spdlog CONFIG QUIET)
if (NOT spdlog_FOUND)
  FetchContent_Declare(
    spdlog
    GIT_REPOSITORY https://github.com/gabime/spdlog.git
    GIT_TAG "v${SPDLOG_VERSION}"
    FIND_PACKAGE_ARGS CONFIG
  )
  FetchContent_MakeAvailable(spdlog)
endif()

option(BUILD_PYTHON_BINDINGS "Build Python bindings" OFF)

if(BUILD_PYTHON_BINDINGS)
    set(PYBIND11_FINDPYTHON ON)
    find_package(Python COMPONENTS Interpreter Development)
    find_package(pybind11 CONFIG QUIET)
    if (NOT pybind11_FOUND)
    FetchContent_Declare(
        pybind11
        GIT_REPOSITORY https://github.com/pybind/pybind11.git
        GIT_TAG "v${PYBIND11_VERSION}"
        FIND_PACKAGE_ARGS CONFIG
    )
    FetchContent_MakeAvailable(pybind11)
    endif()
endif()

if (BUILD_MOVABLE_APP)
    include(${PROJECT_SOURCE_DIR}/cmake/CEF.cmake)
    add_subdirectory(src/desktop)
endif()

add_subdirectory(src/movablegames)

if(BUILD_PYTHON_BINDINGS)
    add_subdirectory(src/python)
endif()

if(${PROJECT_NAME}_APPLY_FORMATING)
    apply_formating(${PROJECT_NAME}_USE_PER_FILE_FORMATTING 
        ${CMAKE_CURRENT_SOURCE_DIR}
    )
endif()

if(${PROJECT_NAME}_APPLY_CLANG_TIDY_GLOBALY)
    apply_clang_tidy_globaly()
endif()

if(${PROJECT_NAME}_BUILD_DOCUMENTATION)
    build_documenation()
endif()
if(${PROJECT_NAME}_ENABLE_ADDRESS_SANITIZER)
    anable_address_sanitizer()
endif()

if (${PROJECT_NAME}_BUILD_TESTS)
    enable_testing()
    add_subdirectory(tests)
endif()

if(${PROJECT_NAME}_ADD_COVERAGE_ANALYSIS)
    add_gcovr_coverage_analysis(${CMAKE_CURRENT_SOURCE_DIR})

endif()
if (${PROJECT_NAME}_BUILD_EXAMPLES)
    add_subdirectory(examples)
endif()
