#!/bin/bash -e

NDK=0
SDK=0
JDK=0
REBUILD=0
CLEAN=0
#DEBUG="NDK_DEBUG=0"
DEBUG="NDK_DEBUG=0 APP_OPTIM=release"
#default should be assembleRelease but not working with gradle 2, to fix 
GRADLE_FLAG="assembleDebug"
VERB=""

#parse options
for i in $* ; do

#! Check for force rebuild
if [ "$i" = "-force_rebuild" ] ; then
  echo -e "\033[31m Usage: $0 Force Rebuild : Activated \033[0m"
  REBUILD=1
fi

if [ "$i" = "-clean" ]; then
  CLEAN=1
fi

if [ "$i" = "-debug" ]; then
  DEBUG="NDK_DEBUG=1"
  GRADLE_FLAG="assembleDebug"
fi

if [ "$i" = "-v" ]; then
  VERB="V=1"
fi

#! Check for the NDK path
if [ "${i%=*}" = "-ndk" ] ; then
  echo -e "\033[31m Usage: $0 Path to Android NDK : Ok \033[0m"
  NDK=1
  export PATH="$(echo $i | cut -d"=" -f2):$PATH"
fi

#! Check for the SDK path
if [ "${i%=*}" = "-sdk" ] ; then
  echo -e "\033[31m Usage: $0 Path to Android SDK : Ok \033[0m"
  SDK=1
  export PATH="$(echo $i | cut -d"=" -f2)/tools:$PATH"
  export ANDROID_HOME="$(echo $i | cut -d"=" -f2)/"
fi

#! Check for the JDK path
if [ "${i%=*}" = "-jdk" ] ; then
 echo -e "\033[31m Usage: $0 Path to JDK : Ok \033[0m"
 JDK=1
 export JAVA_HOME="$(echo $i | cut -d"=" -f2)"
fi

if [ "$i" = "-h" ]; then
echo "Usage: "
echo "-ndk=PATH: path to android NDK"
echo "-sdk=PATH: path to android SDK (for command-line build of APK)"
echo "-jdk=PATH: path to JDK (for command-line build of APK)"
echo "-force_rebuild: forces clean before build"
echo "-clean: remove objs and libs"
echo "-debug: build with debug symbols "
echo "-h: print this screen"
echo "-v: verbose build"
echo ""
echo -e "\n\033[32m If you have problem using this script, check wiki.gpac.io/GPAC-Build-Guide-for-Android or gpac/build/android/README \033[0m\n"
exit 0
fi

done
#args


if [ $NDK -eq 0 ]
then
  echo "\nUsage: $0 ndk=PATH_TO_ANDROID_NDK [ADDITIONAL_NDK-BUILD arguments] : You must give as first argument the directory path of the NDK, add -ndk=PATH_TO_NDK"
  exit 1
fi

if [ $SDK -eq 0 ]
then
  echo -e "\n\033[34m You have not give the directory path of SDK, build of GPAC.apk not possible. Build it with Android Studio or add -sdk=PATH_TO_SDK\033[0m"
fi

if [ $JDK -eq 0 ]
then
  echo -e "\n\033[34m Usage: $0 PATH_TO_JDK : You have not give the directory path of JDK, build of GPAC.apk not possible. Build it with with Android Studio or add -jdk=PATH_TO_JDK \033[0m"
fi

if [ -z $JAVA_HOME ]
then
  echo "The JAVA_HOME environment variable must be set if you build without Android studio"
  echo "Please refer to https://github.com/gpac/gpac/commit/705e199c8eadf35774520206d7f7cf1a043c0539"

fi

if [ -z $ANDROID_HOME ]
then
  echo "The ANDROID_HOME environment variable must be set if you build without Android studio"
  echo "Please refer to https://github.com/gpac/gpac/commit/705e199c8eadf35774520206d7f7cf1a043c0539"

fi

echo -e "\n $PATH"

# Be sure to resolve if script not called from its directory
export BUILDPATH=$(dirname "$0")
cd $BUILDPATH
export BUILDPATH=$(pwd)
echo "Current Dir = $BUILDPATH"

echo "Building libgpac"
cd ../../../
BASEPATH=$(pwd)
#check revision.h is here
./check_revision.sh
version="`grep '#define GPAC_GIT_REVISION' \"./include/gpac/revision.h\" | cut -d '"' -f 2`"

#rm -rf $BUILDPATH/../obj/*

cd $BUILDPATH

if [ $CLEAN -eq 1 ]
then
echo -n "Cleaning all from $BUILDPATH"
ndk-build clean
cd $BASEPATH/applications/gpac_android/
./gradlew clean
cd -
exit 0
fi

echo -n "Buiding all libs from $BUILDPATH"
if [ $REBUILD -eq 1 ]
then
ndk-build clean
cd $BASEPATH/applications/gpac_android/
./gradlew clean
cd -
ndk-build -B $VERB $DEBUG
else
ndk-build $VERB $DEBUG
fi
echo "[OK] build successful."

cd ../libs/


LIBS_DIR="$BASEPATH/applications/gpac_android/src/main/libs"
mkdir -p $LIBS_DIR
echo "GPAC.apk: Copying libs to libs dir $LIBS_DIR ..."
for i in $(find . -name '*.so')
do
	echo -n " Copy $i"
	TMP_DIR=$(dirname $i)
	echo $TMP_DIR
	mkdir -p "$LIBS_DIR/$TMP_DIR"
	cp "$i" "$LIBS_DIR/$i"
done
echo
echo "Done."

LIBS_DIR="$BASEPATH/applications/gpac_android/src/main/libs"
mkdir -p $LIBS_DIR
cd "$BASEPATH/extra_lib/lib/android"
echo "GPAC.apk: Copying all extra libs to $LIBS_DIR ..."
for i in $(find . \( -name '*.so' \))
do
	echo " Copy $i"
	TMP_DIR=$(dirname $i)
	mkdir -p "$LIBS_DIR/$TMP_DIR"
	cp "$i" "$LIBS_DIR/$i"
done
echo "Done."

ASSETS_DIR="$BASEPATH/applications/gpac_android/src/main/assets/share"
mkdir -p $ASSETS_DIR

echo "GPAC.apk: Copying shared resources (GUI, scripts, shaders...) to $ASSETS_DIR ..."
cp -R "$BASEPATH/share/gui" $ASSETS_DIR
cp -R "$BASEPATH/share/shaders" $ASSETS_DIR
cp -R "$BASEPATH/share/scripts" $ASSETS_DIR
cp -R "$BASEPATH/share/res" $ASSETS_DIR
echo "Done."

if [ \( $SDK -eq 1 \) -a \( $JDK -eq 1 \) ]
then

	TAG="$(grep "\#define GPAC_VERSION " $BASEPATH/include/gpac/version.h | cut -d "\"" -f 2 )"

	echo "Building GPAC.apk"
	cd $BASEPATH/applications/gpac_android/
	./gradlew $GRADLE_FLAG
	cd -
	if [ -f $BASEPATH/gpac-$TAG-rev$version.apk ]
	then
	echo -e "\nOld GPAC.apk found. Removing it ..."
	rm $BASEPATH/gpac-$TAG-rev$version.apk
	fi

	cp $BASEPATH/applications/gpac_android/build/outputs/apk/gpac_android-debug.apk $BASEPATH/gpac-$TAG-rev$version.apk
	echo "[OK] success Building GPAC apk"
else
	echo "Run project with Android studio to generate APK"
fi
