add_library(gldoze_files_model STATIC files_model.cpp)
target_include_directories(gldoze_files_model PUBLIC ${CMAKE_CURRENT_LIST_DIR})
target_link_libraries(gldoze_files_model PUBLIC gldoze_sdk)
set_target_properties(gldoze_files_model PROPERTIES POSITION_INDEPENDENT_CODE ON)

set(GLDOZE_FILES_APP_DIR "${CMAKE_BINARY_DIR}/apps/files")
add_library(gldoze_files MODULE files_plugin.cpp directory_watcher.cpp)
target_link_libraries(gldoze_files PRIVATE gldoze_files_model gldoze_sdk)
set_target_properties(gldoze_files PROPERTIES
  LIBRARY_OUTPUT_DIRECTORY "${GLDOZE_FILES_APP_DIR}"
  PREFIX "lib"
  OUTPUT_NAME "gldoze_files"
  CXX_VISIBILITY_PRESET hidden
  VISIBILITY_INLINES_HIDDEN YES
)
file(MAKE_DIRECTORY "${GLDOZE_FILES_APP_DIR}")
configure_file(app.json.in "${GLDOZE_FILES_APP_DIR}/app.json" @ONLY)
configure_file("${GLDOZE_REPO_ROOT}/assets/desktop/icons/files.svg"
  "${GLDOZE_FILES_APP_DIR}/icon.svg" COPYONLY)

install(TARGETS gldoze_files
  LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}/gldoze/apps/files"
  COMPONENT GLDozeDesktop)
install(FILES
  "${GLDOZE_FILES_APP_DIR}/app.json"
  "${GLDOZE_FILES_APP_DIR}/icon.svg"
  DESTINATION "${CMAKE_INSTALL_LIBDIR}/gldoze/apps/files"
  COMPONENT GLDozeDesktop)

if(BUILD_TESTING)
  add_executable(files_model_test files_model_test.cpp)
  target_link_libraries(files_model_test PRIVATE gldoze_files_model)
  add_test(NAME files_model COMMAND files_model_test)

  add_executable(directory_watcher_test directory_watcher_test.cpp directory_watcher.cpp)
  target_link_libraries(directory_watcher_test PRIVATE gldoze_files_model)
  add_test(NAME directory_watcher COMMAND directory_watcher_test)

  add_executable(files_plugin_test files_plugin_test.cpp)
  target_link_libraries(files_plugin_test PRIVATE gldoze_plugin_runtime)
  add_dependencies(files_plugin_test gldoze_files)
  add_test(NAME files_plugin COMMAND files_plugin_test "${GLDOZE_FILES_APP_DIR}/app.json")
endif()
