# 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          → tests-only build
#   WITH_VIEWER=ON + Eigen, libigl, libigl-glad, glfw
#   WITH_CGAL=ON   + Eigen, CGAL       (WITH_VIEWER is implied by WITH_CGAL)
#

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 ─────────────────────────────────────────────────────────────────
if(WITH_CGAL)
    setup_dependency("CGAL-6.1.1" "include")
endif()
