include(functions/FetchContent_MakeAvailableExcludeFromAll)
include(FetchContent)

find_package(Patch REQUIRED)

FetchContent_Declare(discordsrc
  URL https://dl-game-sdk.discordapp.net/3.2.1/discord_game_sdk.zip
  URL_HASH MD5=73e5e1b3f8413a2c7184ef17476822f2
  PATCH_COMMAND "${Patch_EXECUTABLE}" -p1 -N < "${CMAKE_CURRENT_LIST_DIR}/fixes.patch" || true
)
FetchContent_MakeAvailableExcludeFromAll(discordsrc)

file(GLOB discord_SRCS ${discordsrc_SOURCE_DIR}/cpp/*.cpp)
add_library(discord STATIC ${discord_SRCS})
target_include_directories(discord INTERFACE "${discordsrc_SOURCE_DIR}/..")

if(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64")
  set(DISCORD_LIB_DIR "${discordsrc_SOURCE_DIR}/lib/aarch64")
elseif(CMAKE_SIZEOF_VOID_P EQUAL 4)
  set(DISCORD_LIB_DIR "${discordsrc_SOURCE_DIR}/lib/x86")
else()
  set(DISCORD_LIB_DIR "${discordsrc_SOURCE_DIR}/lib/x86_64")
endif()
set(DISCORD_SHARED_LIB_FILENAME "discord_game_sdk${CMAKE_SHARED_LIBRARY_SUFFIX}")

set(DISCORD_SHARED_LIB "${DISCORD_LIB_DIR}/${DISCORD_SHARED_LIB_FILENAME}")
set(DISCORD_SHARED_LIB "${DISCORD_SHARED_LIB}" PARENT_SCOPE)

find_library(
  DISCORD_LIB
  NAMES "${DISCORD_SHARED_LIB_FILENAME}"
  PATHS "${DISCORD_LIB_DIR}"
  REQUIRED
  NO_DEFAULT_PATH
  NO_CMAKE_FIND_ROOT_PATH
)

message("-- 📚 discord_game_sdk: ${DISCORD_LIB}")

# Copy the dll so that tests and Debug builds can find it on Windows.
# We also need it at this location to link to `discord_game_sdk.so` rather
# than `_deps/discordsrc-src/lib/x86_64/discord_game_sdk.so` on Linux.
file(COPY "${DISCORD_SHARED_LIB}" DESTINATION "${CMAKE_BINARY_DIR}")

add_library(discord_game_sdk SHARED IMPORTED GLOBAL)
set_target_properties(discord_game_sdk PROPERTIES
  IMPORTED_IMPLIB "${DISCORD_LIB}"
  IMPORTED_LOCATION "${CMAKE_BINARY_DIR}/${DISCORD_SHARED_LIB_FILENAME}"
)
