# Find Java
find_package(Java REQUIRED)
include(UseJava)

#
# Generate package version
#
find_package(Git REQUIRED)
execute_process(
    COMMAND ${GIT_EXECUTABLE} describe --tags --long --always
    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
    OUTPUT_VARIABLE RAW_VERSION
    OUTPUT_STRIP_TRAILING_WHITESPACE
    ERROR_QUIET)

# Fallback value if git isn't initialized or fails
if(NOT RAW_VERSION)
    set(RAW_VERSION "v0.0.0-0-gunknown")
endif()

# Matches an optional 'v', captures the version numbers (\1), captures the commit count (\2), and drops the hash.
string(REGEX REPLACE "^v?([0-9.]+)-([0-9]+)-g.*" "\\1.\\2" CLEAN_VERSION "${RAW_VERSION}")

# Verification output
message(STATUS "Git Raw Version:   ${RAW_VERSION}")
message(STATUS "Git Clean Version: ${CLEAN_VERSION}")

set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_CLEAN_FILES "${CMAKE_CURRENT_SOURCE_DIR}/src/lib/com/keypme/card_management/api")

find_program(ANT_CMD "ant")
if (ANT_CMD)
    if (DEFINED ENV{IVY_CACHE_DIR})
        set(ANT_CMD_LINE_ARG "-Divy.default.ivy.user.dir=$ENV{IVY_CACHE_DIR} ${ANT_CMD_LINE_ARG}")
    endif()

    add_custom_target(jar_build ALL
        COMMAND ${CMAKE_COMMAND} -E env JAVA_HOME=${JAVA_HOME} ${ANT_CMD} ${ANT_CMD_LINE_ARG} jar
        COMMAND [ ! -z "\$ISO7816_PATH" ] && cp ${CMAKE_CURRENT_SOURCE_DIR}/build/jar/keypme_card_management_client.jar $ENV{ISO7816_PATH}/android/iso7816_lib/libs/ || echo "Set ISO7816_PATH environment variable to copy the JAR binary to KeypMe Android SDK."
        COMMAND [ ! -z "\$ISO7816_PATH" ] && cp ${CMAKE_CURRENT_SOURCE_DIR}/build/jar/keypme_card_management_client.jar $ENV{ISO7816_PATH}/jni/lib/ || echo "Set ISO7816_PATH environment variable to copy the JAR binary to KeypMe JNI SDK."
        DEPENDS generate_protobuf
        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})

    add_custom_target(app_build ALL
        COMMAND ${CMAKE_COMMAND} -E env JAVA_HOME=${JAVA_HOME} ${ANT_CMD} ${ANT_CMD_LINE_ARG} compile-app
        DEPENDS generate_protobuf
        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})


    add_custom_target(jar_publish
        COMMAND ${CMAKE_COMMAND} -E env JAVA_HOME=${JAVA_HOME} ${ANT_CMD} ${ANT_CMD_LINE_ARG} publish-maven -Dversion=${CLEAN_VERSION}-SNAPSHOT
        DEPENDS jar_build
        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})

    set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_CLEAN_FILES "${CMAKE_CURRENT_SOURCE_DIR}/build")
else()
    message(WARNING "Could not find 'ant' command. Protobuf Java files cannot be generated.")
endif()
