set(FOURKIT_PROJECT_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
set(FOURKIT_OUTPUT_DIR  "${CMAKE_CURRENT_BINARY_DIR}/bin/$<CONFIG>")
set(FOURKIT_CSPROJ      "${FOURKIT_PROJECT_DIR}/Minecraft.Server.FourKit.csproj")

file(GLOB_RECURSE FOURKIT_SOURCES RELATIVE "${FOURKIT_PROJECT_DIR}" "${FOURKIT_PROJECT_DIR}/*.cs")
list(FILTER FOURKIT_SOURCES EXCLUDE REGEX "([/\\](obj|bin)[/\\])|^(obj|bin)[/\\]")

set(DOTNET_CONFIG "$<IF:$<CONFIG:Debug>,Debug,Release>")

foreach(src_file IN LISTS FOURKIT_SOURCES)
    get_filename_component(src_path "${src_file}" PATH)
    if(src_path)
        string(REPLACE "/" "\\" group_path "${src_path}")
        source_group("${group_path}" FILES "${FOURKIT_PROJECT_DIR}/${src_file}")
    endif()
endforeach()

list(TRANSFORM FOURKIT_SOURCES PREPEND "${FOURKIT_PROJECT_DIR}/")

add_custom_target(Minecraft.Server.FourKit ALL
  COMMAND dotnet build "${FOURKIT_CSPROJ}"
    --configuration "${DOTNET_CONFIG}"
    --output "${FOURKIT_OUTPUT_DIR}"
  WORKING_DIRECTORY "${FOURKIT_PROJECT_DIR}"
  SOURCES ${FOURKIT_SOURCES}
  COMMENT "dotnet build Minecraft.Server.FourKit"
  VERBATIM
)

set_target_properties(Minecraft.Server.FourKit PROPERTIES
  OUTPUT_NAME "Minecraft.Server.FourKit"
)