#!/bin/bash

ANDROIDSDKPATH=${1:-"/android sdk"}
SDKDOWNLOADPATH=${2:-"http://dl.google.com/android/android-sdk_r08-mac_86.zip"}
PLATFORMVERSION=$3
TEMPDIRNAME=$4

function cleanup {
	echo Deleting temp folder
	if [ -d "$TEMPDIRNAME" ]; then
		rm -r "$TEMPDIRNAME"
	fi
}

function error {
	cleanup
	echo Error: $1 Terminating.
	exit 1
}

if [ -d "${ANDROIDSDKPATH}" ]; then
	error "SDK Path \"${ANDROIDSDKPATH}/\" exists."
fi

# Create temp directory for downloads

mkdir "$TEMPDIRNAME"
if [ $? != 0 ]; then
{
	#cleanup
	mkdir -p "$TEMPDIRNAME"
} fi

# Download and confirm latest sdk
echo Downloading: Android SDK
curl -# -Y 1 -y 10 -o "$TEMPDIRNAME/sdk.zip" $SDKDOWNLOADPATH 2>&1
if [ $? != 0 ]; then
{
    error "Cannot download sdk."
} fi

# Download and confirm repository xml

echo Downloading: repository.xml
curl -# -Y 1 -y 10 -o "$TEMPDIRNAME/sdk.xml" "http://dl.google.com/android/repository/repository.xml" 2>&1
if [ $? != 0 ]; then
{
    error "Cannot download sdk repository xml."
} fi

# Download and confirm latest platform tools

PLATFORMTOOLSFILENAME=`xpath "$TEMPDIRNAME/sdk.xml" '/sdk:sdk-repository/sdk:platform-tool[last()]/sdk:archives/sdk:archive[@os="any" ]/sdk:url/text()' | grep .zip`
if [ $? != 0 ]; then
{
	PLATFORMTOOLSFILENAME=`xpath "$TEMPDIRNAME/sdk.xml" '/sdk:sdk-repository/sdk:platform-tool[last()]/sdk:archives/sdk:archive[@os="macosx" ]/sdk:url/text()' | grep .zip`
} fi

echo Downloading: Platform tools
curl -# -Y 1 -y 10 -o "$TEMPDIRNAME/platform-tools.zip" "http://dl.google.com/android/repository/$PLATFORMTOOLSFILENAME" 2>&1
if [ $? != 0 ]; then
{
    error"Cannot download latest platform tools."
} fi

# Download and confirm latest platform (target and platform file)

PLATFORMXPATH="/sdk:sdk-repository/sdk:platform[last()]"
if [ "$PLATFORMVERSION" != "" ]; then
{
	PLATFORMXPATH="/sdk:sdk-repository/sdk:platform[sdk:version=\"$PLATFORMVERSION\"]"
} fi

PLATFORMFILENAME=`eval "xpath \"$TEMPDIRNAME/sdk.xml\" '$PLATFORMXPATH/sdk:archives/sdk:archive[@os=\"any\"]/sdk:url/text()' | grep .zip"`
if [ $? != 0 ]; then
{
	PLATFORMFILENAME=`eval "xpath \"$TEMPDIRNAME/sdk.xml\" '$PLATFORMXPATH/sdk:archives/sdk:archive[@os=\"macosx\"]/sdk:url/text()' | grep .zip"`
} fi
if [ $? != 0 ]; then
{
    error "Cannot parse repository xml."
} fi

PLATFORMTARGET=`eval "xpath \"$TEMPDIRNAME/sdk.xml\" '$PLATFORMXPATH/sdk:api-level/text()' | grep ^[0-9]*$"`
echo Downloading: $PLATFORMFILENAME
curl -# -Y 1 -y 10 -o "$TEMPDIRNAME/platform.zip" "http://dl.google.com/android/repository/$PLATFORMFILENAME" 2>&1
if [ $? != 0 ]; then
{
    error "Cannot download latest platform."
} fi

# Unzip and move sdk to target directory

FOLDER1=`unzip -Z -1 "$TEMPDIRNAME/sdk.zip" | head -1`
unzip -qq "$TEMPDIRNAME/sdk.zip" -d "$TEMPDIRNAME"
mv -f "$TEMPDIRNAME/$FOLDER1" "$ANDROIDSDKPATH"

# Unzip and move platform to target directory

FOLDER2=`unzip -Z -1 "$TEMPDIRNAME/platform.zip" | head -1`
unzip -qq "$TEMPDIRNAME/platform.zip" -d "$TEMPDIRNAME"
mv -f "$TEMPDIRNAME/$FOLDER2" "$ANDROIDSDKPATH/platforms/android-$PLATFORMTARGET"

# Unzip and move platform tools to target directory

FOLDER3=`unzip -Z -1 "$TEMPDIRNAME/platform-tools.zip" | head -1`
unzip -qq "$TEMPDIRNAME/platform-tools.zip" -d "$TEMPDIRNAME"
mv -f "$TEMPDIRNAME/$FOLDER3" "$ANDROIDSDKPATH/platform-tools"

if [ ! -d "$ANDROIDSDKPATH" ]; then
{
    error "Could not copy sdk to target directory."
} fi

if [ ! -d "$ANDROIDSDKPATH/platforms/android-$PLATFORMTARGET" ]; then
{
    error "Could not copy platform sdk to target directory."
} fi

# Clean up and exit

cleanup
echo SDK install successful.
