#!/bin/bash

VERSION_STRING=""

#GIT='/cygdrive/c/Program Files \(x86\)/Git/bin/git'
GIT=git




parse_git_branch () {
    $GIT branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/\1/"
}


ARCH=$1
TARGET=$2
INTERFACE=$3
INTERFACE_DEFINITION=$4
VERSION_H=$5

SCRIPT=$(readlink -f $0)
SCRIPTPATH=`dirname $SCRIPT`
OUTPUTDIR=$(pwd)
echo " current dir is : " $(pwd)
echo $SCRIPT
echo $SCRIPTPATH

echo "changing dir to script path: " $SCRIPTPATH
cd $SCRIPTPATH

# set version string ##################################################################
if [ -z $VERSION_STRING ] ; then
  VERSION_STRING=$(date +%Y%m%d_%H%M)
fi
GIT_DESCRIBE=$($GIT describe)
GIT_BRANCH=$(parse_git_branch)

# extract path from branchname:
IFS='_' read -ra TMP_ARRAY <<< "${GIT_BRANCH}"
BRANCH_PATH=${TMP_ARRAY[0]}



# detect if we have a development version:
if [ ${#TMP_ARRAY[1]} -gt 0 ] ; then
  DEV_SUFFIX="_dev"
else
  DEV_SUFFIX=""
fi

# detect if git status is dirty
GIT_DESCRIBE_DIRTY=$($GIT describe --dirty)
if [ "${GIT_DESCRIBE_DIRTY:(-6)}" == "-dirty" ] ; then
  DIRTY_SUFFIX="_dirty"
else
  DIRTY_SUFFIX=""
fi


if [ -n "$DIRTY_SUFFIX" ] || [ -n "$DEV_SUFFIX" ] ; then
  DEVDIRTY=true
else
  DEVDIRTY=false
fi


# extract interface definition 

#
#Q_DECLARE_INTERFACE(CCInterface,
#         "eu.atb.ptu.plugin.CCInterface/2.9.0")
# -> extract whole string within quotation marks
INTERFACE_VERSION=$(grep 'eu.atb.ptu.plugin.' ${INTERFACE_DEFINITION})
# get string within quotes:
INTERFACE_VERSION=`echo ${INTERFACE_VERSION} | awk -F \" '{print $2}'`


#
# write version.h


echo "     TARGET is: $TARGET"
echo "     ARCH   is: $ARCH"
echo " "
echo "     PluginName: $TARGET"
echo "     Interface:  $INTERFACE"
echo "     InterfaceVersion: $INTERFACE_VERSION"
echo " "
echo "     new version is:  $VERSION_STRING"
echo "     git describe is: $GIT_DESCRIBE"
echo "     git branch is:   $GIT_BRANCH"
echo "     branch-path is:  $BRANCH_PATH"
echo "  "

echo "     dev suffix:     $DEV_SUFFIX"
echo "     dirty suffix:   $DIRTY_SUFFIX"


PLUGIN_VERSION=${VERSION_STRING}
#ATB_QT_GIT_DESCRIBE=${GIT_DESCRIBE}_${GIT_BRANCH}
PLUGIN_GIT_DESCRIBE=${GIT_DESCRIBE}_${BRANCH_PATH}${DEV_SUFFIX}${DIRTY_SUFFIX}

#TARGET=IngenicoZVT_CCPlugin


# build version.h #####################################################################

echo "     building new version info (version.h) ..."




echo "#ifndef VERSION_H"   >  ${VERSION_H}
echo "#define VERSION_H"   >> ${VERSION_H}
echo ""                    >> ${VERSION_H}
echo ""                    >> ${VERSION_H}
echo "#define INTERFACE_VERSION \"${INTERFACE_VERSION}\""      >> ${VERSION_H}
echo "#define PLUGIN_VERSION \"${PLUGIN_VERSION}\""           >> ${VERSION_H}
echo ""                                                       >> ${VERSION_H}
echo "#define PLUGIN_GIT_DESCRIBE \"${PLUGIN_GIT_DESCRIBE}\"" >> ${VERSION_H}
echo ""                                                       >> ${VERSION_H}
echo ""                                                       >> ${VERSION_H}

cat <<EOT >> ${VERSION_H}

const std::string pluginInfoString = R"(
{
    "Interface": "${INTERFACE}",
    "InterfaceVersion": "${INTERFACE_VERSION}",
    "PluginName": "${TARGET}",
    "Version": "${PLUGIN_VERSION}",
    "git-describe": "${PLUGIN_GIT_DESCRIBE}",
}
)";

EOT

echo ""                                              >> ${VERSION_H}
echo ""                                              >> ${VERSION_H}
if [ ${DEVDIRTY} == "true" ] ; then
echo "#define DEVDIRTY"                              >> ${VERSION_H}
echo ""                                              >> ${VERSION_H}
echo ""                                              >> ${VERSION_H}
fi
echo "#define SYSTEM_ARCH \"${ARCH}\""               >> ${VERSION_H}
echo "#define ARCH_${ARCH}"                          >> ${VERSION_H}
echo ""                                              >> ${VERSION_H}
echo "" 					     >> ${VERSION_H}
echo "#endif //VERSION_H"  >> ${VERSION_H}