include(CMakeParseArguments) # CMake 2.8 - 3.4 compatibility

set( _MY_DIR ${CMAKE_CURRENT_LIST_DIR})

# This function will use (and build if asked to) a static library target called 'gamesdk'.
# The location of the library is set according to your ANDROID_NDK_REVISION
# and ANDROID_PLATFORM, unless you explicitly set ANDROID_NDK_VERSION and/or
# ANDROID_SDK_VERSION arguments.
#
# All supported arguments are:
#  PACKAGE_DIR: where the packaged version of the library is (relative to the caller working directory).
#    This parameter is mandatory.
#  ROOT_DIR: where the gamesdk directory is located (relative to the caller working directory), when building from sources.
#    This must be specified if DO_LOCAL_BUILD is set
#  LIBRARIES: the library names to build, when building from sources.
#    This must be specified if DO_LOCAL_BUILD is set.
#  DO_LOCAL_BUILD: whether to add a custom build command to build the gamesdk (ON/OFF).
#    default value: OFF
#  ANDROID_NDK_VERSION: override the version number for the NDK (major.minor.patch).
#    It's recommended to use `ndkVersion` in your build.gradle file if you want to use a specific NDK.
#    default value: derived from ANDROID_NDK_REVISION.
#  ANDROID_API_LEVEL: override the android API level.
#    It's recommended to change the SDK version in your build.gradle to use a specific SDK.
#    default value: derived from ANDROID_PLATFORM.
#  BUILD_TYPE: type of Game SDK build libraries to use. Can be "Release" or "Debug".
#    default value: Release
function(add_gamesdk_target)
    set(options DO_LOCAL_BUILD)
    set(oneValueArgs LIBRARIES PACKAGE_DIR ROOT_DIR ANDROID_NDK_VERSION ANDROID_API_LEVEL BUILD_TYPE)
    cmake_parse_arguments(GAMESDK "${options}" "${oneValueArgs}" "" ${ARGN} )

    # Make sanity checks to avoid hard to debug errors at compile/link time.
    if(NOT DEFINED GAMESDK_PACKAGE_DIR)
        message(FATAL_ERROR "You must specify PACKAGE_DIR when calling add_gamesdk_target. It should be the folder where gamesdk is extracted (or where packages should be built, if compiling from sources).")
    endif()
    get_filename_component(INCLUDE_FULL_PATH "${GAMESDK_PACKAGE_DIR}/include/" REALPATH)
    if (NOT GAMESDK_DO_LOCAL_BUILD AND NOT EXISTS ${INCLUDE_FULL_PATH})
        message(FATAL_ERROR "Can't find the gamesdk includes in ${INCLUDE_FULL_PATH}. Are you sure you properly set up the path to the Game SDK using GAMESDK_PACKAGE_DIR?")
    endif()
    if (GAMESDK_DO_LOCAL_BUILD AND NOT DEFINED GAMESDK_LIBRARIES)
        message(FATAL_ERROR "You specified DO_LOCAL_BUILD to build the game sdk from sources, but did not specified the libraries to build with LIBRARIES.")
    endif()
    if(GAMESDK_DO_LOCAL_BUILD AND NOT DEFINED GAMESDK_ROOT_DIR)
        message(FATAL_ERROR "You specified DO_LOCAL_BUILD to build the game sdk from sources, but did not specified the gamesdk root folder with ROOT_DIR (used to run Gradle).")
    endif()
    if(NOT DEFINED GAMESDK_BUILD_TYPE)
        set(GAMESDK_BUILD_TYPE "${CMAKE_BUILD_TYPE}")
    endif()

    # Infer Android SDK/NDK and STL versions
    if (NOT DEFINED GAMESDK_ANDROID_NDK_VERSION)
        set(GAMESDK_ANDROID_NDK_VERSION ${ANDROID_NDK_REVISION})
    endif()
    string(REGEX REPLACE "^([^.]+).*" "\\1" GAMESDK_ANDROID_NDK_MAJOR_VERSION ${GAMESDK_ANDROID_NDK_VERSION} ) # Get NDK major version

    # TODO(b/192829605): look into why sometimes ANDROID_NDK_REVISION seems to be wrong
    string(SUBSTRING ${GAMESDK_ANDROID_NDK_MAJOR_VERSION} 0 2 GAMESDK_ANDROID_NDK_MAJOR_VERSION) # Mitigate bug above by taking at most 2 chars

    if (NOT DEFINED GAMESDK_ANDROID_API_LEVEL)
        string(REGEX REPLACE "^android-([^.]+)" "\\1" GAMESDK_ANDROID_API_LEVEL ${ANDROID_PLATFORM} )
    endif()
    string(REPLACE "+" "p" GAMESDK_ANDROID_STL ${ANDROID_STL}) # Game SDK build names use a sanitized STL name (c++ => cpp)

    # Set up the "gamesdk" libraries
    set(BUILD_NAME ${ANDROID_ABI}_API${GAMESDK_ANDROID_API_LEVEL}_NDK${GAMESDK_ANDROID_NDK_MAJOR_VERSION}_${GAMESDK_ANDROID_STL}_${GAMESDK_BUILD_TYPE})
    set(GAMESDK_LIBS_DIR "${GAMESDK_PACKAGE_DIR}/libs/${BUILD_NAME}")
    set(GAMESDK_SHARED_LIBS_DIR "${GAMESDK_PACKAGE_DIR}/libs/${ANDROID_ABI}")

    include_directories( "${GAMESDK_PACKAGE_DIR}/include" ) # Games SDK Public Includes

    get_filename_component(SWAPPY_DEP_LIB "${GAMESDK_LIBS_DIR}/libswappy_static.a" REALPATH)
    get_filename_component(TUNINGFORK_DEP_LIB "${GAMESDK_LIBS_DIR}/libtuningfork_static.a" REALPATH)
    get_filename_component(MEMORY_ADVICE_DEP_LIB "${GAMESDK_LIBS_DIR}/libmemory_advice_static.a" REALPATH)
    get_filename_component(OBOE_DEP_LIB "${GAMESDK_LIBS_DIR}/liboboe_static.a" REALPATH)
    add_library(swappy STATIC IMPORTED GLOBAL)
    add_library(tuningfork STATIC IMPORTED GLOBAL)
    add_library(memory_advice STATIC IMPORTED GLOBAL)
    add_library(oboe STATIC IMPORTED GLOBAL)

    if(GAMESDK_DO_LOCAL_BUILD)
        # Get the absolute path for the root dir, otherwise it can't be used as a working directory for commands.
        get_filename_component(GAMESDK_ROOT_DIR "${GAMESDK_ROOT_DIR}" REALPATH)

        # If building from a project containing local.properties, generated by Android Studio with
        # the local Android SDK and NDK paths, copy it to gamesdk to allow it to build with the local
        # toolchain.
        if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../local.properties")
            file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/../local.properties
                 DESTINATION ${GAMESDK_ROOT_DIR})
        endif()

        # Build Game SDK (Gradle will use local.properties to find the Android SDK/NDK,
        # or the environment variables if no local.properties - i.e: if compiling from command line).
        if (${CMAKE_HOST_SYSTEM_NAME} MATCHES "Windows")
            file(TO_NATIVE_PATH "${GAMESDK_ROOT_DIR}/gradlew.bat" GAMESDK_GRADLE_BIN)
        else()
            file(TO_NATIVE_PATH "${GAMESDK_ROOT_DIR}/gradlew" GAMESDK_GRADLE_BIN)
        endif()
        add_custom_command(
            OUTPUT
                ${SWAPPY_DEP_LIB} ${TUNINGFORK_DEP_LIB}  ${MEMORY_ADVICE_DEP_LIB} ${OBOE_DEP_LIB}
            COMMAND
                ${GAMESDK_GRADLE_BIN} buildLocal -Plibraries=${GAMESDK_LIBRARIES} -PandroidApiLevel=${GAMESDK_ANDROID_API_LEVEL} -PbuildType=${GAMESDK_BUILD_TYPE} -PpackageName=local -Pndk=${GAMESDK_ANDROID_NDK_VERSION} --info
            VERBATIM
            WORKING_DIRECTORY
                "${GAMESDK_ROOT_DIR}"
        )
        add_custom_target(swappy_lib DEPENDS ${SWAPPY_DEP_LIB})
        add_custom_target(tuningfork_lib DEPENDS ${TUNINGFORK_DEP_LIB})
        add_custom_target(memory_advice_lib DEPENDS ${MEMORY_ADVICE_DEP_LIB})
        add_custom_target(oboe_lib DEPENDS ${OBOE_DEP_LIB})
        add_dependencies(swappy swappy_lib)
        add_dependencies(tuningfork tuningfork_lib)
        add_dependencies(memory_advice memory_advice_lib)
        add_dependencies(oboe oboe_lib)
    else()
        if("${ANDROID_ABI}" STREQUAL "armeabi-v7a" OR "${ANDROID_ABI}" STREQUAL "x86")
            set(BUILD_NAME ${ANDROID_ABI}_API19_NDK23_cpp_shared_${GAMESDK_BUILD_TYPE})
        else()
            set(BUILD_NAME ${ANDROID_ABI}_API21_NDK23_cpp_shared_${GAMESDK_BUILD_TYPE})
        endif()
        set(GAMESDK_LIBS_DIR "${GAMESDK_PACKAGE_DIR}/libs/${BUILD_NAME}")
        set(GAMESDK_SHARED_LIBS_DIR "${GAMESDK_PACKAGE_DIR}/libs/${ANDROID_ABI}")
        get_filename_component(SWAPPY_DEP_LIB "${GAMESDK_LIBS_DIR}/libswappy_static.a" REALPATH)
        get_filename_component(TUNINGFORK_DEP_LIB "${GAMESDK_LIBS_DIR}/libtuningfork_static.a" REALPATH)
        get_filename_component(MEMORY_ADVICE_DEP_LIB "${GAMESDK_LIBS_DIR}/libmemory_advice_static.a" REALPATH)
        get_filename_component(OBOE_DEP_LIB "${GAMESDK_LIBS_DIR}/liboboe_static.a" REALPATH)
        # Validity check to ensure that the library files exist
        if(NOT EXISTS ${SWAPPY_DEP_LIB} AND
            NOT EXISTS ${TUNINGFORK_DEP_LIB} AND
            NOT EXISTS ${MEMORY_ADVICE_DEP_LIB} AND
            NOT EXISTS ${OBOE_DEP_LIB})
            message(FATAL_ERROR "Can't find any library in \"${GAMESDK_LIBS_DIR}\". Are you sure you are using a supported Android SDK/NDK and STL variant?")
        endif()
    endif()

    # Set targets to use the libraries (see https://gitlab.kitware.com/cmake/community/wikis/doc/tutorials/Exporting-and-Importing-Targets)
    set_target_properties(swappy PROPERTIES IMPORTED_LOCATION ${SWAPPY_DEP_LIB})
    set_target_properties(tuningfork PROPERTIES IMPORTED_LOCATION ${TUNINGFORK_DEP_LIB})
    set_target_properties(memory_advice PROPERTIES IMPORTED_LOCATION ${MEMORY_ADVICE_DEP_LIB})
    set_target_properties(oboe PROPERTIES IMPORTED_LOCATION ${OBOE_DEP_LIB})

endfunction()

# Use this function in addition to add_gamesdk_target, to integrate GameSDK
# sources to your project - allowing the IDE to provide autocompletions and
# debugging.
function(add_gamesdk_sources)
    add_subdirectory("${_MY_DIR}/../src" "${_MY_DIR}/../src")
endfunction()
