#!/bin/bash

function j_debug
{
	echo "${1}" >&2
}

function j_debug_n
{
	echo -n "${1}" >&2
}

function j_message
{
	if ! zenity --error --text="$1" --title=Makagiga 2>/dev/null; then
		if ! kdialog --caption Makagiga --error "$1" 2>/dev/null; then
#			if ! dialog --title Makagiga --infobox "$1" 0 0 2>/dev/null; then
			# just print to stderr
			j_debug "$1"
#			fi
		fi
	fi
}

function j_launch
{
	j_debug "Using Java Launcher: '${JAVA_BIN}'."
	BASE_DIR="@@INSTALL_PREFIX@@/share/makagiga"
	if ! ${JAVA_BIN} -Xverify:none -Xms16m -Xmx128m -jar "${BASE_DIR}/makagiga.jar" "${@}"; then
		VERSION_INFO=`$JAVA_BIN -version 2>&1`

		j_message \
"An error occurred during execution of the Makagiga.

USEFUL TIPS:
- Makagiga requires Java(tm) SE 6.
- You can download Java from http://java.com/ or
  http://www.oracle.com/technetwork/java/javase/downloads/index.html
- See README.html to see how to install Java in Ubuntu.
- Make sure the correct Java launcher (java) is in the PATH environment variable.
- Run \"update-alternatives --list java\" to list all installed/known Java launchers.
- Run \"update-alternatives --config java\" to change the default Java launcher (this command requires administrator password).

Detected Java:
VERSION:
$VERSION_INFO
LAUNCHER:
$JAVA_BIN"
	fi
}

JAVA_BIN=java

j_debug_n "Checking if JAVA_HOME is defined... "
if [ -n "${JAVA_HOME}" ]; then
	j_debug "'${JAVA_HOME}'"
	j_debug_n "Checking if JAVA_HOME is valid... "
	if [ -f "${JAVA_HOME}/bin/java" ]; then
		JAVA_BIN="${JAVA_HOME}/bin/java"
		j_debug "Yes."
		j_launch "${@}"
		exit
	else
		j_debug "No. Ignoring JAVA_HOME ('${JAVA_HOME}')."
	fi
else
	j_debug "No."
fi

j_debug_n "Searching for the default 'java'... "
DEFAULT_JAVA_BIN=`which java 2>/dev/null`
if [ -n "${DEFAULT_JAVA_BIN}" ]; then
	j_debug "Found."
	JAVA_BIN="${DEFAULT_JAVA_BIN}"
else
	j_debug "Not found."
	j_debug_n "Checking default Java directories..."
	for JAVA_DIR in "/usr/java" "/opt/java" "/usr/local/java"; do
		j_debug_n " '${JAVA_DIR}'"
		if [ -d "${JAVA_DIR}" ]; then
			j_debug
			j_debug "Java found in '${JAVA_DIR}'."
			j_debug_n "Searching for the default version... "
			for JAVA_VERSION in ${JAVA_DIR}/*; do
				if [ "${JAVA_DIR}/default" == "${JAVA_VERSION}" ]; then
					j_debug "Found '${JAVA_VERSION}'."
					JAVA_BIN="${JAVA_VERSION}/bin/java"
					break 2
				elif [ "${JAVA_DIR}/latest" == "${JAVA_VERSION}" ]; then
					j_debug "Found '${JAVA_VERSION}'."
					JAVA_BIN="${JAVA_VERSION}/bin/java"
					break 2
				fi
			done
			j_debug "Not found."
			j_debug_n "Picking the latest version..."
			JAVA_MISC_VERSIONS=`find ${JAVA_DIR}/* -maxdepth 0 -type d|sort -r`
			for JAVA_VERSION in ${JAVA_MISC_VERSIONS}; do
				if [ -d "${JAVA_DIR}" ]; then
					j_debug " `basename ${JAVA_VERSION}`"
					JAVA_BIN="${JAVA_VERSION}/bin/java"
					break 2
				fi
			done
		fi
	done
fi

j_launch "${@}"
