#!/bin/bash
set -e

export PRODUCT=@product@
export BUILD=@build@
export PACKAGE_NAME=@package_name@

# export PRODUCT=idea
# export BUILD=ideaIC-98.486
# export PACKAGE_NAME=idea-IC-98.486

# Clear temporary folder
export TMP_FOLDER=/tmp/${PRODUCT}
rm -rf ${TMP_FOLDER}
mkdir -p ${TMP_FOLDER}
if [ ! -d ${TMP_FOLDER} ]
then
    	echo Creating temp folder ${TMP_FOLDER} failed.
	echo Aborting installation.
	exit 1
fi


# Clear target folder
rm -rf /opt/jetbrains/${PRODUCT}
if [ -d /opt/jetbrains/${PRODUCT} ]; then
	echo Cannot remove /opt/jetbrains/${PRODUCT}
	echo Aborting installation.
	exit 1
fi

# Creating target folder
mkdir -p /opt/jetbrains
if [ ! -d /opt/jetbrains ]; then
	echo Cannot create /opt/jetbrains
	echo Aborting installation.
	exit 1
fi

cd ${TMP_FOLDER}

# Downloading tar.gz
echo "Downloading idea binaries"
export FILE_NAME=${BUILD}.tar.gz
export URL=http://download.jetbrains.com/${PRODUCT}/${FILE_NAME}
wget ${URL}

# Check that everything is downloaded and show error message is something went wrong
if [ ! -f ${TMP_FOLDER}/${FILE_NAME} ]; then
	echo Download binaries failed ${URL}
	echo Aborting installation.
	exit 1
fi

# Extracting package
echo Extracting package to the folder ${TMP_FOLDER}
tar xfz ${TMP_FOLDER}/${FILE_NAME} -C ${TMP_FOLDER}
if [ ! -d ${TMP_FOLDER}/${PACKAGE_NAME} ]; then
	echo Cannot find ${TMP_FOLDER}/${PACKAGE_NAME} 
	echo Extraction failed. 
	echo Aborting installation.
	exit 1
fi

# Move to the target folder
mv ${PACKAGE_NAME} ${PRODUCT}
mv ${PRODUCT} /opt/jetbrains

# Remove temporary folder
rm -rf ${TMP_FOLDER}


echo "Updating menu items"
if [ "$1" = "configure" ] && [ -x "`which update-menus 2>/dev/null`" ]; then
	update-menus
fi

