set(GLDOZE_GLEDIT_APP_DIR "${CMAKE_BINARY_DIR}/apps/gledit")

add_library(gldoze_gledit MODULE
  gledit_plugin.cpp
  "${GLDOZE_REPO_ROOT}/apps/editor/gledit_document.cpp"
  "${GLDOZE_REPO_ROOT}/apps/editor/gledit_syntax.cpp"
)
target_include_directories(gldoze_gledit PRIVATE "${GLDOZE_REPO_ROOT}/apps/editor")
target_link_libraries(gldoze_gledit PRIVATE gldoze_sdk)
set_target_properties(gldoze_gledit PROPERTIES
  LIBRARY_OUTPUT_DIRECTORY "${GLDOZE_GLEDIT_APP_DIR}"
  PREFIX "lib"
  OUTPUT_NAME "gldoze_gledit"
  CXX_VISIBILITY_PRESET hidden
  VISIBILITY_INLINES_HIDDEN YES
)

file(MAKE_DIRECTORY "${GLDOZE_GLEDIT_APP_DIR}")
configure_file(app.json.in "${GLDOZE_GLEDIT_APP_DIR}/app.json" @ONLY)
configure_file("${GLDOZE_REPO_ROOT}/assets/desktop/icons/editor.svg"
  "${GLDOZE_GLEDIT_APP_DIR}/icon.svg" COPYONLY)

install(TARGETS gldoze_gledit LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}/gldoze/apps/gledit"
  COMPONENT GLDozeDesktop)
install(FILES "${GLDOZE_GLEDIT_APP_DIR}/app.json" "${GLDOZE_GLEDIT_APP_DIR}/icon.svg"
  DESTINATION "${CMAKE_INSTALL_LIBDIR}/gldoze/apps/gledit"
  COMPONENT GLDozeDesktop)

if(BUILD_TESTING)
  add_executable(gledit_document_test
    "${GLDOZE_REPO_ROOT}/apps/editor/tests/gledit_document_test.cpp"
    "${GLDOZE_REPO_ROOT}/apps/editor/gledit_document.cpp"
    "${GLDOZE_REPO_ROOT}/apps/editor/gledit_syntax.cpp"
  )
  target_include_directories(gledit_document_test PRIVATE "${GLDOZE_REPO_ROOT}/apps/editor")
  add_test(NAME gledit_document COMMAND gledit_document_test)
endif()
