include(GNUInstallDirs)

add_library(gldoze_asset_library_ui STATIC
  src/asset_benchmark.cpp
  src/asset_camera_fit.cpp
  src/asset_cinema.cpp
  src/asset_delete_dialog.cpp
  src/asset_frame_limiter.cpp
  src/asset_gpu_selection.cpp
  src/asset_preview_layout.cpp
  src/asset_window_close.cpp
  ${GLDOZE_REPO_ROOT}/apps/mesh_splitter/src/mesh_splitter_ui.cpp
)
target_include_directories(gldoze_asset_library_ui PUBLIC
  ${CMAKE_CURRENT_SOURCE_DIR}/src
  ${GLDOZE_REPO_ROOT}/apps/mesh_splitter/src
)
target_link_libraries(gldoze_asset_library_ui PUBLIC gldoze_widgets)
gldoze_apply_dev_warnings(gldoze_asset_library_ui)

add_executable(gldoze_asset_library
  src/main.cpp
  src/asset_library_app.cpp
)
set_target_properties(gldoze_asset_library PROPERTIES
  RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
)
target_include_directories(gldoze_asset_library PRIVATE
  ${GLDOZE_REPO_ROOT}/apps/mesh_splitter/src
)
target_link_libraries(gldoze_asset_library PRIVATE
  gldoze_asset_library_ui
  gldoze_widgets
)
if((GLDOZE_ENABLE_X11 OR GLDOZE_ENABLE_WAYLAND) AND UNIX AND NOT APPLE)
  target_compile_definitions(gldoze_asset_library PRIVATE GLDOZE_ASSET_LIBRARY_NATIVE_EGL=1)
endif()
gldoze_apply_dev_warnings(gldoze_asset_library)

install(TARGETS gldoze_asset_library
  RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
  COMPONENT GLDozeDesktop
)
install(FILES
  ${CMAKE_CURRENT_SOURCE_DIR}/gldoze-asset-library.desktop
  DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications
  COMPONENT GLDozeDesktop
)
install(FILES
  ${GLDOZE_REPO_ROOT}/assets/desktop/icons/gldoze.svg
  DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/scalable/apps
  RENAME gldoze-asset-library.svg
  COMPONENT GLDozeDesktop
)
install(DIRECTORY ${GLDOZE_REPO_ROOT}/tools/asset_pack_template/
  DESTINATION share/gldoze/asset-pack-template
  COMPONENT GLDozeDesktop
)

if(BUILD_TESTING)
  add_executable(asset_library_support_test
    tests/asset_library_support_test.cpp
  )
  target_link_libraries(asset_library_support_test PRIVATE gldoze_widgets)
  target_compile_options(asset_library_support_test PRIVATE
    "$<$<CXX_COMPILER_ID:GNU,Clang,AppleClang>:-UNDEBUG>")
  add_test(NAME asset_library_support COMMAND asset_library_support_test)

  add_executable(asset_lod_test
    tests/asset_lod_test.cpp
  )
  target_link_libraries(asset_lod_test PRIVATE gldoze_widgets)
  target_compile_options(asset_lod_test PRIVATE
    "$<$<CXX_COMPILER_ID:GNU,Clang,AppleClang>:-UNDEBUG>")
  gldoze_apply_dev_warnings(asset_lod_test)
  add_test(NAME asset_lod COMMAND asset_lod_test)

  add_executable(asset_benchmark_test
    tests/asset_benchmark_test.cpp
  )
  target_link_libraries(asset_benchmark_test PRIVATE gldoze_asset_library_ui)
  target_compile_options(asset_benchmark_test PRIVATE
    "$<$<CXX_COMPILER_ID:GNU,Clang,AppleClang>:-UNDEBUG>")
  gldoze_apply_dev_warnings(asset_benchmark_test)
  add_test(NAME asset_benchmark COMMAND asset_benchmark_test)

  add_executable(asset_cinema_test
    tests/asset_cinema_test.cpp
  )
  target_link_libraries(asset_cinema_test PRIVATE gldoze_asset_library_ui)
  target_compile_options(asset_cinema_test PRIVATE
    "$<$<CXX_COMPILER_ID:GNU,Clang,AppleClang>:-UNDEBUG>")
  gldoze_apply_dev_warnings(asset_cinema_test)
  add_test(NAME asset_cinema COMMAND asset_cinema_test)

  add_executable(asset_camera_fit_test
    tests/asset_camera_fit_test.cpp
  )
  target_link_libraries(asset_camera_fit_test PRIVATE gldoze_asset_library_ui)
  target_compile_options(asset_camera_fit_test PRIVATE
    "$<$<CXX_COMPILER_ID:GNU,Clang,AppleClang>:-UNDEBUG>")
  gldoze_apply_dev_warnings(asset_camera_fit_test)
  add_test(NAME asset_camera_fit COMMAND asset_camera_fit_test)

  add_executable(asset_preview_layout_test
    tests/asset_preview_layout_test.cpp
  )
  target_link_libraries(asset_preview_layout_test PRIVATE gldoze_asset_library_ui)
  target_compile_options(asset_preview_layout_test PRIVATE
    "$<$<CXX_COMPILER_ID:GNU,Clang,AppleClang>:-UNDEBUG>")
  gldoze_apply_dev_warnings(asset_preview_layout_test)
  add_test(NAME asset_preview_layout COMMAND asset_preview_layout_test)

  add_executable(asset_delete_dialog_test
    tests/asset_delete_dialog_test.cpp
  )
  target_link_libraries(asset_delete_dialog_test PRIVATE gldoze_asset_library_ui)
  target_compile_options(asset_delete_dialog_test PRIVATE
    "$<$<CXX_COMPILER_ID:GNU,Clang,AppleClang>:-UNDEBUG>")
  gldoze_apply_dev_warnings(asset_delete_dialog_test)
  add_test(NAME asset_delete_dialog COMMAND asset_delete_dialog_test)

  add_executable(asset_frame_limiter_test
    tests/asset_frame_limiter_test.cpp
  )
  target_link_libraries(asset_frame_limiter_test PRIVATE gldoze_asset_library_ui)
  target_compile_options(asset_frame_limiter_test PRIVATE
    "$<$<CXX_COMPILER_ID:GNU,Clang,AppleClang>:-UNDEBUG>")
  gldoze_apply_dev_warnings(asset_frame_limiter_test)
  add_test(NAME asset_frame_limiter COMMAND asset_frame_limiter_test)

  add_executable(asset_gpu_selection_test
    tests/asset_gpu_selection_test.cpp
  )
  target_link_libraries(asset_gpu_selection_test PRIVATE gldoze_asset_library_ui)
  target_compile_options(asset_gpu_selection_test PRIVATE
    "$<$<CXX_COMPILER_ID:GNU,Clang,AppleClang>:-UNDEBUG>")
  gldoze_apply_dev_warnings(asset_gpu_selection_test)
  add_test(NAME asset_gpu_selection COMMAND asset_gpu_selection_test)

  add_executable(asset_window_close_test
    tests/asset_window_close_test.cpp
  )
  target_link_libraries(asset_window_close_test PRIVATE gldoze_asset_library_ui)
  target_compile_options(asset_window_close_test PRIVATE
    "$<$<CXX_COMPILER_ID:GNU,Clang,AppleClang>:-UNDEBUG>")
  gldoze_apply_dev_warnings(asset_window_close_test)
  add_test(NAME asset_window_close COMMAND asset_window_close_test)
endif()
