
set(APP_SRCS
  desktop_app.cpp
)
set(APP_TARGET "MovableGames")


if(OS_WINDOWS)
  set(APP_SRCS_WIN ${APP_SRCS} resources/app.rc)
  add_executable(${APP_TARGET}_win WIN32 ${APP_SRCS_WIN})
  SET_EXECUTABLE_TARGET_PROPERTIES(${APP_TARGET}_win)

  target_link_libraries(${APP_TARGET}_win PRIVATE 
    libcef 
    libcef_dll_wrapper 
    ${CEF_STANDARD_LIBS} 
    spdlog::spdlog_header_only
  )

  if(MSVC)
    target_compile_options(${APP_TARGET}_win PRIVATE /EHsc)
    target_link_options(${APP_TARGET}_win PRIVATE "/MANIFESTUAC:level='requireAdministrator'")
  endif()

  COPY_CEF_FILES(${APP_TARGET}_win)
  set_target_properties(${APP_TARGET}_win PROPERTIES
      RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
  )
endif()

if(OS_LINUX)
  add_executable(${APP_TARGET}_linux ${APP_SRCS})
  SET_EXECUTABLE_TARGET_PROPERTIES(${APP_TARGET}_linux)

  target_link_libraries(${APP_TARGET}_linux PRIVATE 
    libcef 
    libcef_dll_wrapper 
    ${CEF_STANDARD_LIBS} 
    spdlog::spdlog_header_only
  )

  COPY_CEF_FILES(${APP_TARGET}_linux)
  set_target_properties(${APP_TARGET}_linux PROPERTIES
      RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
  )
endif()


message(STATUS "")
message(STATUS "=======================================================")
message(STATUS "Movable Desktop App Configuration")
message(STATUS "=======================================================")
if(OS_WINDOWS)
    message(STATUS "Target Windows: ${APP_TARGET}_win")
endif()
if(OS_LINUX)
    message(STATUS "Target Linux: ${APP_TARGET}_linux")
endif()
message(STATUS "Target Version: ${ENGINE_VERSION}")
message(STATUS "Platform: ${CEF_PLATFORM}")
message(STATUS "CEF Version: ${CEF_VERSION}")
if(CMAKE_CONFIGURATION_TYPES)
    message(STATUS "Build Types: ${CMAKE_CONFIGURATION_TYPES}")
else()
    message(STATUS "Build Type: ${CMAKE_BUILD_TYPE}")
endif()
message(STATUS "=======================================================")
message(STATUS "")

# INSTALLATION RULES
if (OS_WINDOWS)

  set_target_properties(${APP_TARGET}_win PROPERTIES
      OUTPUT_NAME "${APP_TARGET}"
      RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
  )

  # Install the main executable
  install(TARGETS ${APP_TARGET}_win RUNTIME DESTINATION ".")

  # Correctly install dependencies from the bin folder
  if(MSVC AND NOT CMAKE_GENERATOR MATCHES "Ninja")
      set(BIN_INPUT_DIR "${CMAKE_BINARY_DIR}/bin/Release/")
  else()
      set(BIN_INPUT_DIR "${CMAKE_BINARY_DIR}/bin/")
  endif()

  # Install all files from BIN_INPUT_DIR to the installation root
  install(DIRECTORY "${BIN_INPUT_DIR}"
          DESTINATION "."
          PATTERN "*.exp" EXCLUDE
          PATTERN "*.lib" EXCLUDE
          PATTERN "*.pdb" EXCLUDE
          PATTERN "${APP_TARGET}_win.exe" EXCLUDE
          PATTERN "${APP_TARGET}.exe" EXCLUDE
  )

  # Install the license file
  install(FILES "${PROJECT_SOURCE_DIR}/LICENSE" DESTINATION ".")

  # CPACK CONFIGURATION
  set(CPACK_PACKAGE_NAME "MovableGames")
  set(CPACK_PACKAGE_VENDOR "MovableGames")
  set(CPACK_PACKAGE_VERSION "${ENGINE_VERSION}")
  set(CPACK_PACKAGE_INSTALL_DIRECTORY "MovableGames")
  set(CPACK_PACKAGE_FILE_NAME "MovableGames-${ENGINE_VERSION}-Win64")
  
  set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE")
  set(CPACK_GENERATOR "NSIS")
  set(CPACK_NSIS_CREATE_ICONS_EXTRA "
    CreateShortCut '$SMPROGRAMS\\\\$STARTMENU_FOLDER\\\\MovableGames.lnk' '$INSTDIR\\\\MovableGames.exe' '' '$INSTDIR\\\\MovableGames.exe' 0 '' '' 'Movable Games'
    CreateShortCut '$DESKTOP\\\\MovableGames.lnk' '$INSTDIR\\\\MovableGames.exe' '' '$INSTDIR\\\\MovableGames.exe' 0 '' '' 'Movable Games'
  ")
  set(CPACK_NSIS_MODIFY_PATH ON)
  set(CPACK_NSIS_DEFINES "RequestExecutionLevel admin")

  include(CPack) 
endif()
