set(TARGET_NAME packaged-server-console)

if (CLIENT_ONLY AND APPLE)
  # Don't include Console.app in client-only OSX DMGs.
  return()
endif()

if (PRODUCTION_BUILD)
  set(PRODUCTION_OPTION "--production")
endif()

if (CLIENT_ONLY)
  set(CLIENT_ONLY_OPTION "--client_only")
endif()

# add a target that will package the console
add_custom_target(${TARGET_NAME}-npm-install
  COMMAND npm install
  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
add_custom_target(${TARGET_NAME}
  COMMAND npm run packager -- --out ${CMAKE_CURRENT_BINARY_DIR} ${PRODUCTION_OPTION} ${CLIENT_ONLY_OPTION}
  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
  DEPENDS ${TARGET_NAME}-npm-install
)

set_target_properties(${TARGET_NAME} PROPERTIES FOLDER "Server Console")
set_target_properties(${TARGET_NAME}-npm-install PROPERTIES FOLDER "hidden/Server Console")

# add a dependency from the package target to the server components
if (BUILD_CLIENT)
  if (APPLE)
    add_dependencies(${TARGET_NAME} Overte)
  else()
    add_dependencies(${TARGET_NAME} interface)
  endif()
endif()

if (BUILD_SERVER)
  add_dependencies(${TARGET_NAME} assignment-client domain-server)
endif()

# set the packaged console folder depending on platform, so we can copy it
if (APPLE)
  if (CLIENT_ONLY)
    set(PACKAGED_CONSOLE_FOLDER "Console-darwin-x64/${CONSOLE_EXEC_NAME}")
  else ()
    set(PACKAGED_CONSOLE_FOLDER "Sandbox-darwin-x64/${CONSOLE_EXEC_NAME}")
  endif()
elseif (WIN32)
  set(PACKAGED_CONSOLE_FOLDER "server-console-win32-x64")
elseif (UNIX)
  set(PACKAGED_CONSOLE_FOLDER "server-console-linux-x64")
endif ()

# install the packaged Server Console in our install directory
if (APPLE)
  install(
    DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${PACKAGED_CONSOLE_FOLDER}"
    USE_SOURCE_PERMISSIONS
    DESTINATION ${CONSOLE_INSTALL_DIR}
  )
elseif (WIN32)
  set(CONSOLE_DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/${PACKAGED_CONSOLE_FOLDER}")

  install(
    DIRECTORY "${CONSOLE_DESTINATION}/"
    DESTINATION ${CONSOLE_INSTALL_DIR}
  )

  # sign the copied server console executable after install
  set(EXECUTABLE_PATH "${CONSOLE_DESTINATION}/${CONSOLE_EXEC_NAME}")
  optional_win_executable_signing()
endif()

if (PR_BUILD OR PRODUCTION_BUILD)
  set_target_properties(${TARGET_NAME} PROPERTIES EXCLUDE_FROM_ALL FALSE EXCLUDE_FROM_DEFAULT_BUILD FALSE)

  if (APPLE)
    set(BESIDE_CONSOLE_DIR "${CONSOLE_INSTALL_APP_PATH}/Contents/Resources")
  else ()
    set(BESIDE_CONSOLE_DIR ${CONSOLE_INSTALL_DIR})
  endif ()

  # configure our build info json file and install it beside the console
  set(CONSOLE_BUILD_INFO_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/build-info.json")
  configure_file("${HF_CMAKE_DIR}/templates/console-build-info.json.in" ${CONSOLE_BUILD_INFO_OUTPUT})
  install(
    FILES ${CONSOLE_BUILD_INFO_OUTPUT}
    DESTINATION ${BESIDE_CONSOLE_DIR}
    COMPONENT ${SERVER_COMPONENT}
  )
else ()
  set_target_properties(${TARGET_NAME} PROPERTIES EXCLUDE_FROM_ALL TRUE EXCLUDE_FROM_DEFAULT_BUILD TRUE)
  set_target_properties(${TARGET_NAME}-npm-install PROPERTIES EXCLUDE_FROM_ALL TRUE EXCLUDE_FROM_DEFAULT_BUILD TRUE)
endif ()