# Make ${Qt6_Widgets} optional
if(QT6_GUI_AVAILABLE AND TARGET Qt6::Widgets)
  set(Qt6_Widgets ${Qt6_Widgets})
else()
  set(Qt6_Widgets "")
endif()


PROJECT(nglwidgets)

# Poppler is optional - stub if not available
find_package(PkgConfig QUIET)
if(PkgConfig_FOUND)
  pkg_check_modules(POPPLER_QT6 poppler-qt6)
endif()

if(NOT POPPLER_QT6_FOUND)
  message(STATUS "Poppler-Qt6 not found - building nglwidgets without PDF support")
  set(POPPLER_QT6_INCLUDE_DIR "")
  set(POPPLER_QT6_LIBRARY "")
  set(HAVE_POPPLER_QT6 FALSE)
else()
  set(HAVE_POPPLER_QT6 TRUE)
endif()

# Only find Qt6 Widgets if GUI is available
if(QT6_GUI_AVAILABLE)
  # Try standard find_package first, fall back to manual target if OpenGL missing
  find_package(Qt6 QUIET COMPONENTS Widgets)
  if(NOT TARGET Qt6::Widgets)
    # Manual fallback: create imported targets when standard find fails due to OpenGL
    if(NOT TARGET Qt6::Gui)
      add_library(Qt6::Gui SHARED IMPORTED)
      set_target_properties(Qt6::Gui PROPERTIES
        IMPORTED_LOCATION "/usr/lib/x86_64-linux-gnu/libQt6Gui.so.6"
        INTERFACE_INCLUDE_DIRECTORIES "/usr/include/x86_64-linux-gnu/qt6/QtGui;/usr/include/x86_64-linux-gnu/qt6"
      )
    endif()
    if(NOT TARGET Qt6::Widgets)
      add_library(Qt6::Widgets SHARED IMPORTED)
      set_target_properties(Qt6::Widgets PROPERTIES
        IMPORTED_LOCATION "/usr/lib/x86_64-linux-gnu/libQt6Widgets.so.6"
        INTERFACE_INCLUDE_DIRECTORIES "/usr/include/x86_64-linux-gnu/qt6/QtWidgets;/usr/include/x86_64-linux-gnu/qt6"
        INTERFACE_LINK_LIBRARIES "Qt6::Gui;Qt6::Core"
      )
    endif()
  endif()
endif()

#
# NGL Widgets library
#
SET(nglwidgets_SRCS
    ngldialogbuttonbox.cpp
    ngldialogbuttonbox.h
    ngldialog.cpp
    ngldialog.h
    nglmainwindow.cpp
    nglmainwindow.h
    nglstandardbutton.cpp
    nglstandardbutton.h
    ngltreeitem.cpp
    ngltreeitem.h
    ngltreemodel.cpp
    ngltreemodel.h
    nglwidgets_export.h
)

# PDF support files - only included when Poppler-Qt6 is available
if(HAVE_POPPLER_QT6)
  list(APPEND nglwidgets_SRCS
    nglpdfdocument.cpp
    nglpdfdocument.h
    nglpdfpage.cpp
    nglpdfpage.h
    nglpdfwidget.cpp
    nglpdfwidget.h
  )
endif()

NGL_WRAP_UI(nglwidgets_SRCS
    nglpdfwidget.ui
)

# Collect big resource QRCs
set(oxygen_SRCS)
if(TARGET Qt6::Core)
  # Use Qt6's CMake helper to generate resource sources so resources are available at runtime.
  # Both qrcs MUST go through qt_add_resources: a raw .qrc left in the source list is not
  # compiled (CMAKE_AUTORCC is off), so its resources would be missing at runtime
  # (e.g. :icons/16x16/* toolbar/window icons used by LogView).
  qt_add_resources(oxygen_SRCS nglresources.qrc rme_light_style.qrc)
else()
  NGL_ADD_BIG_RESOURCES(oxygen_SRCS nglresources.qrc rme_light_style.qrc)
endif()

# SV: logView
NGL_ADD_LIBRARY2(WS AAR SV nglwidgets SHARED ${nglwidgets_SRCS} ${oxygen_SRCS})
if(HAVE_POPPLER_QT6)
  target_compile_definitions(nglwidgets PRIVATE HAVE_POPPLER_QT6)
  target_include_directories(nglwidgets PRIVATE ${POPPLER_QT6_INCLUDE_DIRS})
  target_link_libraries(nglwidgets PRIVATE ${POPPLER_QT6_LIBRARIES})
endif()
if(QT6_GUI_AVAILABLE)
  NGL_TARGET_LINK_LIBRARIES(nglwidgets
    PRIVATE
      NGLLogger
      ngltranslator
      ngltools
    PUBLIC
      Qt6::Core
      ${Qt6_Widgets}
  )
endif()

NGL_INSTALL_TARGET(nglwidgets)

# Unit test for PDFWidget
IF(BUILD_TESTING AND TARGET nglwidgets AND QT6_GUI_AVAILABLE)
  FIND_PACKAGE(Qt6 REQUIRED COMPONENTS Test)
  ADD_EXECUTABLE(test_nglpdfwidget test_nglpdfwidget.cpp)
  TARGET_LINK_LIBRARIES(test_nglpdfwidget PRIVATE nglwidgets Qt6::Test ${Qt6_Widgets})
  ADD_TEST(NAME test_nglpdfwidget COMMAND $<TARGET_FILE:test_nglpdfwidget>)
ENDIF()
