# SQLite3: el target SQLite::SQLite3 lo crea ya cpp/CMakeLists.txt (sistema en
# Linux, vendored amalgamation en Windows). Si esta app se construye en
# stand-alone, levantar SQLite desde el amalgamation vendoreado del registry.
find_package(SQLite3 QUIET)
if(NOT SQLite3_FOUND AND NOT TARGET sqlite3_vendored)
    set(SQLITE3_AMALG_DIR ${FN_CPP_ROOT_DIR}/vendor/sqlite3)
    add_library(sqlite3_vendored STATIC ${SQLITE3_AMALG_DIR}/sqlite3.c)
    target_include_directories(sqlite3_vendored PUBLIC ${SQLITE3_AMALG_DIR})
    target_compile_definitions(sqlite3_vendored PRIVATE
        SQLITE_THREADSAFE=1
        SQLITE_ENABLE_FTS5
        SQLITE_ENABLE_JSON1
    )
    add_library(SQLite::SQLite3 ALIAS sqlite3_vendored)
endif()

add_imgui_app(graph_explorer
    main.cpp
    data.cpp
    views.cpp
    views_jobs.cpp
    types_registry.cpp
    layout_store.cpp
    entity_ops.cpp
    project_manager.cpp
    node_groups.cpp
    jobs.cpp
    enrichers.cpp
    agent.cpp
    extract_panel.cpp
    # --- viz ---
    ${FN_CPP_ROOT_DIR}/functions/viz/graph_renderer.cpp
    ${FN_CPP_ROOT_DIR}/functions/viz/graph_force_layout.cpp
    ${FN_CPP_ROOT_DIR}/functions/viz/graph_force_layout_gpu.cpp
    ${FN_CPP_ROOT_DIR}/functions/viz/graph_layouts.cpp
    ${FN_CPP_ROOT_DIR}/functions/viz/graph_viewport.cpp
    ${FN_CPP_ROOT_DIR}/functions/viz/graph_viewport_selection.cpp
    ${FN_CPP_ROOT_DIR}/functions/viz/graph_labels.cpp
    ${FN_CPP_ROOT_DIR}/functions/viz/graph_labels_select.cpp
    ${FN_CPP_ROOT_DIR}/functions/viz/graph_icons.cpp
    ${FN_CPP_ROOT_DIR}/functions/viz/graph_sources.cpp
    ${FN_CPP_ROOT_DIR}/functions/viz/graph_types.cpp
    ${FN_CPP_ROOT_DIR}/functions/core/graph_spatial_hash.cpp
    # --- core UI ---
    ${FN_CPP_ROOT_DIR}/functions/core/button.cpp
    ${FN_CPP_ROOT_DIR}/functions/core/icon_button.cpp
    ${FN_CPP_ROOT_DIR}/functions/core/toolbar.cpp
    ${FN_CPP_ROOT_DIR}/functions/core/modal_dialog.cpp
    ${FN_CPP_ROOT_DIR}/functions/core/text_input.cpp
    ${FN_CPP_ROOT_DIR}/functions/core/select.cpp
    ${FN_CPP_ROOT_DIR}/functions/core/tree_view.cpp
    ${FN_CPP_ROOT_DIR}/functions/core/page_header.cpp
    ${FN_CPP_ROOT_DIR}/functions/core/fullscreen_window.cpp
    ${FN_CPP_ROOT_DIR}/functions/core/badge.cpp
    ${FN_CPP_ROOT_DIR}/functions/core/empty_state.cpp
)

target_include_directories(graph_explorer PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR}
    ${FN_CPP_ROOT_DIR}/functions
)

target_link_libraries(graph_explorer PRIVATE SQLite::SQLite3 DuckDB::DuckDB)
duckdb_copy_runtime(graph_explorer)

# Threads — issue 0026 (jobs system) usa std::thread + std::mutex + condvar.
find_package(Threads REQUIRED)
target_link_libraries(graph_explorer PRIVATE Threads::Threads)

# OpenGL: graph_renderer + graph_force_layout_gpu llaman gl* directamente.
# fn::run_app inicializa el loader cuando AppConfig::init_gl_loader = true.
if(NOT WIN32)
    find_package(OpenGL REQUIRED)
    target_link_libraries(graph_explorer PRIVATE OpenGL::GL)
endif()

if(WIN32)
    set_target_properties(graph_explorer PROPERTIES WIN32_EXECUTABLE TRUE)
endif()
