# deps/CMakeLists.txt
#
# Lazy tarball extraction – a dependency is only extracted when its directory
# does not yet exist.  Extraction happens at cmake configure time.
#
# Which deps are extracted depends on the active build mode:
#
#   (default)           Eigen only
#   WITH_CGAL_TESTS=ON  + Eigen, CGAL           (headless CI — no viewer)
#   WITH_VIEWER=ON      + Eigen, libigl, libigl-glad, glfw
#   WITH_CGAL=ON        + Eigen, CGAL, libigl, libigl-glad, glfw
#

function(setup_dependency NAME SUBDIR)
    if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${NAME}")
        file(MAKE_DIRECTORY "${NAME}")
        file(GLOB TARBALL "${CMAKE_CURRENT_SOURCE_DIR}/tarballs/${NAME}.tar.*")
        message(STATUS "${CMAKE_CURRENT_SOURCE_DIR}")
        if(NOT TARBALL)
            message(FATAL_ERROR "❌ No '${NAME}*.tar.*' in deps/tarballs/")
        else()
            message(STATUS "${CMAKE_COMMAND}  ${TARBALL}")
            if(SUBDIR STREQUAL "")
                execute_process(
                    COMMAND "${CMAKE_COMMAND}" -E tar xf "${TARBALL}"
                    RESULT_VARIABLE TAR_STATUS
                    WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
            else()
                execute_process(
                    COMMAND "${CMAKE_COMMAND}" -E tar xf "${TARBALL}" "${NAME}/${SUBDIR}"
                    RESULT_VARIABLE TAR_STATUS
                    WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
            endif()
            message(STATUS "Extracting ${NAME}... Status: ${TAR_STATUS}")
            if(NOT TAR_STATUS EQUAL 0)
                message(FATAL_ERROR "❌ Extract failed: ${NAME}")
            endif()
        endif()
    else()
        message(STATUS "✅ ${NAME} already exists, skipping extraction.")
    endif()
endfunction()

# ── Always required ────────────────────────────────────────────────────────────
setup_dependency("eigen-3.4.0" "Eigen")

# ── Viewer mode ────────────────────────────────────────────────────────────────
if(WITH_VIEWER)
    setup_dependency("libigl-2.6.0"  "include")
    setup_dependency("libigl-glad"   "")
    setup_dependency("glfw-3.4"      "")
endif()

# ── CGAL mode ─────────────────────────────────────────────────────────────────
# Both WITH_CGAL_TESTS (headless CI) and WITH_CGAL (full build) need CGAL headers.
if(WITH_CGAL OR WITH_CGAL_TESTS)
    setup_dependency("CGAL-6.1.1" "include")
endif()
