################################################################################
## Project for working with OpenGL and Qt6 widgets                            ##
##                                                                            ##
## Author: Shaun Reed | Contact: shaunrd0@gmail.com | URL: www.shaunreed.com  ##
## All Content (c) 2023 Shaun Reed, all rights reserved                       ##
################################################################################

################################################################################
# Qtk Widget Library
################################################################################
# Create a library of widgets used to build Qtk GUI
set(
    QTK_PLUGIN_LIBRARY_SOURCES
    qtkwidget.cpp qtkwidget.h
    debugconsole.cpp debugconsole.ui
    toolbox.cpp toolbox.ui
    treeview.cpp treeview.ui
)
set(
    QTK_PLUGIN_LIBRARY_HEADERS
    debugconsole.h
    toolbox.h
    treeview.h
)
qt_add_library(qtk-plugin-library STATIC)
target_sources(
    qtk-plugin-library PRIVATE
    "${QTK_PLUGIN_LIBRARY_SOURCES}"
    "${QTK_PLUGIN_LIBRARY_HEADERS}"
)
target_link_libraries(qtk-plugin-library PUBLIC Qt6::UiPlugin qtk-library)

install(
    TARGETS qtk-plugin-library
    BUNDLE DESTINATION lib
    LIBRARY DESTINATION lib
    ARCHIVE DESTINATION lib/static
    RUNTIME DESTINATION bin
)

install(
    TARGETS qtk-plugin-library
    BUNDLE DESTINATION "${QTK_PLUGIN_LIBRARY_DIR}"
    LIBRARY DESTINATION "${QTK_PLUGIN_LIBRARY_DIR}"
    RUNTIME DESTINATION "${QTK_PLUGIN_LIBRARY_DIR}"
    ARCHIVE DESTINATION "${QTK_PLUGIN_LIBRARY_DIR}"
)

################################################################################
# Qtk Widget Collection Plugin
################################################################################
# Create a Qt Designer plugin for a collection of widgets from our library.
qt_add_plugin(qtk-collection)
target_sources(
    qtk-collection PRIVATE
    widgetplugincollection.cpp widgetplugincollection.h
    widgetplugin.cpp widgetplugin.h
)
target_link_libraries(qtk-collection PUBLIC qtk-plugin-library)

install(
    TARGETS qtk-collection
    RUNTIME DESTINATION "${QTK_PLUGIN_INSTALL_DIR}"
    BUNDLE DESTINATION "${QTK_PLUGIN_INSTALL_DIR}"
    LIBRARY DESTINATION "${QTK_PLUGIN_INSTALL_DIR}"
)

################################################################################
# Final Qtk Application
################################################################################

set(
    QTK_APP_SOURCES
    examplescene.cpp examplescene.h
    qtkmainwindow.cpp qtkmainwindow.ui
    qtkmainwindow.h
    main.cpp
)
# TODO: Qtk library should not depend on these resources. (qtkapi.h)
#   Or should some resources be installed somewhere?
qt6_add_resources(QTK_APP_SOURCES "${QTK_RESOURCES}/resources.qrc")
configure_file(
    resources.h.in
    "${CMAKE_CURRENT_BINARY_DIR}/resources.h"
    @ONLY
)

qt_add_executable(qtk-main ${QTK_APP_SOURCES})
target_link_libraries(qtk-main PRIVATE qtk-plugin-library)

set_target_properties(
    qtk-main PROPERTIES
      WIN32_EXECUTABLE TRUE
      MACOSX_BUNDLE TRUE
      MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
      MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
)

install(
    TARGETS qtk-main
    BUNDLE DESTINATION bin
    RUNTIME DESTINATION bin
    LIBRARY DESTINATION bin/lib
)