#!/bin/bash
#
# .---.                  .              .
# |                      |              |
# |--- .--. .-.  .-.  .-.|  .-. .--.--. |.-.  .-. .--.  .-.
# |    |   (.-' (.-' (   | (   )|  |  | |   )(   )|  | (.-'
# '    '     --'  --'  -' -  -' '  '   -' -'   -' '   -  --'
#
#                    Freedom in the Cloud
#
# Add or remove apps
#
# License
# =======
#
# Copyright (C) 2015-2016 Bob Mottram <bob@robotics.uk.to>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

PROJECT_NAME='freedombone'

export TEXTDOMAIN=${PROJECT_NAME}-selector
export TEXTDOMAINDIR="/usr/share/locale"

PROJECT_INSTALL_DIR=/usr/local/bin
if [ -f /usr/bin/${PROJECT_NAME} ]; then
	PROJECT_INSTALL_DIR=/usr/bin
fi

source $PROJECT_INSTALL_DIR/${PROJECT_NAME}-vars

COMPLETION_FILE=$HOME/${PROJECT_NAME}-completed.txt

source $PROJECT_INSTALL_DIR/${PROJECT_NAME}-utils-selector

function show_apps {
	applist=""
	n=1
	app_index=0
	for a in "${APPS_AVAILABLE[@]}"
	do
		if [[ ${APPS_INSTALLED[$app_index]} == "0" ]]; then
			applist="$applist $n $a off"
		else
			applist="$applist $n $a on"
		fi
		n=$[n+1]
		app_index=$[app_index+1]
	done

	choices=$(dialog --stdout --backtitle $"Freedombone" \
					 --title $"Installed applications" \
					 --checklist $'Choose:' \
					 80 40 20 $applist)

	if [ $? -eq 0 ]; then
		for choice in $choices
		do
			app_index = $[choice-1]
			APPS_CHOSEN[$app_index]="1"
		done
	else
		exit 0
	fi
}

function remove_apps_interactive {
	# which apps need to be removed?
	removals=""
	app_index=0
	n=0
	for a in "${APPS_INSTALLED[@]}"
	do
		if [[ ${APPS_INSTALLED[$app_index]} == "1" ]]; then
			if [[ ${APPS_CHOSEN[$app_index]} == "0" ]]; then
				if [ ${n} -gt 0 ]; then
					removals="$removals $APPS_AVAILABLE[$app_index]"
				else
					removals="$APPS_AVAILABLE[$app_index]"
				fi
				n=$[n+1]
			fi
		fi
		app_index=$[app_index+1]
	done

	# if no apps to be removed then don't do anything
	if [ ${n} -eq 0 ]; then
		return
	fi

	# ask for confirmation
	dialog --title $"Remove applications" \
		   --backtitle $"Freedombone" \
		   --defaultno \
		   --yesno $"\nYou have chosen to remove $n apps.\n\n    $removals\n\nIf you choose 'yes' then this will remove both the applications and their data/messages. If you don't have a backup then you will not be able to recover the data for these applications.\n\nAre you sure that you wish to continue?" 15 60
	sel=$?
	case $sel in
		1) return;;
		255) return;;
	esac

	# remove the apps
	read_configuration
	remove_apps
}

function install_apps_interactive {
	# which apps need to be installed?
	installs=""
	app_index=0
	n=0
	for a in "${APPS_INSTALLED[@]}"
	do
		if [[ ${APPS_INSTALLED[$app_index]} == "0" ]]; then
			if [[ ${APPS_CHOSEN[$app_index]} == "1" ]]; then
				if [ ${n} -gt 0 ]; then
					installs="$installs $APPS_AVAILABLE[$app_index]"
				else
					installs="$APPS_AVAILABLE[$app_index]"
				fi
				n=$[n+1]
			fi
		fi
		app_index=$[app_index+1]
	done

	# if no apps to be installed then don't do anything
	if [ ${n} -eq 0 ]; then
		return
	fi

	# ask for confirmation
	dialog --title $"Remove applications" \
		   --backtitle $"Freedombone" \
		   --defaultno \
		   --yesno $"\nYou have chosen to install $n apps.\n\n    $installs\n\nIf you choose 'yes' then these will now be installed.\n\nAre you sure that you wish to continue?" 15 60
	sel=$?
	case $sel in
		1) return;;
		255) return;;
	esac

	# install the apps
	read_configuration
	install_apps
}

${PROJECT_NAME}-tests
if [ ! "$?" = "0" ]; then
	exit 2
fi

detect_apps

# if no applications were found
if [[ ${#APPS_AVAILABLE[@]} == 0 ]]; then
	exit 1
fi

show_apps

clear

remove_apps_interactive
install_apps_interactive

exit 0
