#!/bin/bash
#
#Copyright 2012 - 2013 CurlyMo & mk01 <development@xbian.org>
#
#This file is part of XBian - XBMC on the Raspberry Pi.
#
#XBian is free software: you can redistribute it and/or modify it under the
#terms of the GNU General Public License as published by the Free Software
#Foundation, either version 3 of the License, or (at your option) any later
#version.
#
#XBian 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 General Public License for more
#details.
#
#You should have received a copy of the GNU General Public License along
#with XBian. If not, see <http://www.gnu.org/licenses/>

# Shows rootpass successfully changed dialog
function showUpdateAptDBDlg() {
	wrapTxtFn "$(_ packages.apt.update)" $(($DEFAULTWIDTH-4));
	centerTxtFn "$WRAPPEDTXT" $(($DEFAULTWIDTH-4));
	valignTxtFn "$CENTEREDTXT"
	showInfoDlg "$ALIGNEDTXT" $HEIGHT
	return $?;
}

function showUpdateAptDBFailedDlg() {
	wrapTxtFn "$(_ packages.apt.update_failed)" $(($DEFAULTWIDTH-4));
	centerTxtFn "$WRAPPEDTXT" $(($DEFAULTWIDTH-4));
	valignTxtFn "$CENTEREDTXT"
	showMsgDlg "$ALIGNEDTXT" $HEIGHT
	return $?;
}

function showDownloadPackageListDlg() {
	wrapTxtFn "$(_ packages.list.download)" $(($DEFAULTWIDTH-4));
	centerTxtFn "$WRAPPEDTXT" $(($DEFAULTWIDTH-4));
	valignTxtFn "$CENTEREDTXT"
	showInfoDlg "$ALIGNEDTXT" $HEIGHT
	return $?;
}

function showFailedToRetrieveAptMirrosDlg() {
	wrapTxtFn "$(_ packages.mirrors.download_failed)" $(($DEFAULTWIDTH-4));
	centerTxtFn "$WRAPPEDTXT" $(($DEFAULTWIDTH-4));
	valignTxtFn "$CENTEREDTXT"
	showMsgDlg "$ALIGNEDTXT" $HEIGHT
	return $?;
}

function showGettingLocalPackageInfoDlg() {
	wrapTxtFn "$(_ packages.loading)" $(($DEFAULTWIDTH-4));
	centerTxtFn "$WRAPPEDTXT" $(($DEFAULTWIDTH-4));
	valignTxtFn "$CENTEREDTXT"
	showInfoDlg "$ALIGNEDTXT" $HEIGHT
	return $?;
}

function showConfirmInstallUpdateDlg() {
	wrapTxtFn "$(_ packages.install.confirm)" $(($DEFAULTWIDTH-4));
	centerTxtFn "$WRAPPEDTXT" $(($DEFAULTWIDTH-4));
	valignTxtFn "$CENTEREDTXT"
	showConfirmDlg "$ALIGNEDTXT" $HEIGHT
	return $?;
}

function showConfirmRemoveDlg() {
	wrapTxtFn "$(_ packages.remove.confirm)" $(($DEFAULTWIDTH-4));
	centerTxtFn "$WRAPPEDTXT" $(($DEFAULTWIDTH-4));
	valignTxtFn "$CENTEREDTXT"
	showConfirmDlg "$ALIGNEDTXT" $HEIGHT
	return $?;
}

function showPackageAlreadyInstalledDlg() {
	wrapTxtFn "$(_ packages.already_installed)" $(($DEFAULTWIDTH-4));
	centerTxtFn "$WRAPPEDTXT" $(($DEFAULTWIDTH-4));
	valignTxtFn "$CENTEREDTXT"
	showMsgDlg "$ALIGNEDTXT" $HEIGHT
	return $?;
}

function showPackageVersionNotExistDlg() {
	wrapTxtFn "$(_ packages.unavailable_version)" $(($DEFAULTWIDTH-4));
	centerTxtFn "$WRAPPEDTXT" $(($DEFAULTWIDTH-4));
	valignTxtFn "$CENTEREDTXT"
	showMsgDlg "$ALIGNEDTXT" $HEIGHT
	return $?;
}

function showPackageNotExistDlg() {
	wrapTxtFn "$(_ packages.not_exists)" $(($DEFAULTWIDTH-4));
	centerTxtFn "$WRAPPEDTXT" $(($DEFAULTWIDTH-4));
	valignTxtFn "$CENTEREDTXT"
	showMsgDlg "$ALIGNEDTXT" $HEIGHT
	return $?;
}

function showPackageInstallSuccessDlg() {
	wrapTxtFn "$(_ packages.install.success)" $(($DEFAULTWIDTH-4));
	centerTxtFn "$WRAPPEDTXT" $(($DEFAULTWIDTH-4));
	valignTxtFn "$CENTEREDTXT"
	showMsgDlg "$ALIGNEDTXT" $HEIGHT
	return $?;
}

function showPackageNotInstalledDlg() {
	wrapTxtFn "$(_ packages.not_installed)" $(($DEFAULTWIDTH-4));
	centerTxtFn "$WRAPPEDTXT" $(($DEFAULTWIDTH-4));
	valignTxtFn "$CENTEREDTXT"
	showMsgDlg "$ALIGNEDTXT" $HEIGHT
	return $?;
}

function showPackageEssentialDlg() {
	wrapTxtFn "$(_ packages.essential)" $(($DEFAULTWIDTH-4));
	centerTxtFn "$WRAPPEDTXT" $(($DEFAULTWIDTH-4));
	valignTxtFn "$CENTEREDTXT"
	showMsgDlg "$ALIGNEDTXT" $HEIGHT
	return $?;
}

function showPackageRemovedSuccessDlg() {
	wrapTxtFn "$(_ packages.remove.success)" $(($DEFAULTWIDTH-4));
	centerTxtFn "$WRAPPEDTXT" $(($DEFAULTWIDTH-4));
	valignTxtFn "$CENTEREDTXT"
	showMsgDlg "$ALIGNEDTXT" $HEIGHT
	return $?;
}

function showAskForLogDlg() {
	wrapTxtFn "$(_ packages.show_log)" $(($DEFAULTWIDTH-4));
	centerTxtFn "$WRAPPEDTXT" $(($DEFAULTWIDTH-4));
	valignTxtFn "$CENTEREDTXT"
	showConfirmDlg "$ALIGNEDTXT" $HEIGHT
	return $?;
}

function showPackageAdvErrorDlg() {
	wrapTxtFn "$(_ packages.error)" $(($DEFAULTWIDTH-4));
	centerTxtFn "$WRAPPEDTXT" $(($DEFAULTWIDTH-4));
	valignTxtFn "$CENTEREDTXT"
	showMsgDlg "$ALIGNEDTXT" $HEIGHT
	return $?;
}

function showPackageDowngradeDlg() {
	wrapTxtFn "$(_ packages.downgrade)" $(($DEFAULTWIDTH-4));
	centerTxtFn "$WRAPPEDTXT" $(($DEFAULTWIDTH-4));
	valignTxtFn "$CENTEREDTXT"
	showMsgDlg "$ALIGNEDTXT" $HEIGHT
	return $?;
}

function showInstallUpdatePackageDlg() {
	wrapTxtFn "$(_ packages.installing)" $(($DEFAULTWIDTH-4));
	centerTxtFn "$WRAPPEDTXT" $(($DEFAULTWIDTH-4));
	valignTxtFn "$CENTEREDTXT"
	showInfoDlg "$ALIGNEDTXT" $HEIGHT
	return $?;
}

function showRemovingPackageDlg() {
	wrapTxtFn "$(_ packages.removing)" $(($DEFAULTWIDTH-4));
	centerTxtFn "$WRAPPEDTXT" $(($DEFAULTWIDTH-4));
	valignTxtFn "$CENTEREDTXT"
	showInfoDlg "$ALIGNEDTXT" $HEIGHT
	return $?;
}

function showPackageNotExistsDlg() {
	wrapTxtFn "$(_ packages.not_exists)" $(($DEFAULTWIDTH-4));
	centerTxtFn "$WRAPPEDTXT" $(($DEFAULTWIDTH-4));
	valignTxtFn "$CENTEREDTXT"
	showMsgDlg "$ALIGNEDTXT" $HEIGHT
	return $?;
}

function showPacakgeInstallRetryDlg() {
	wrapTxtFn "$(_ packages.install.retry)" $(($DEFAULTWIDTH-4));
	centerTxtFn "$WRAPPEDTXT" $(($DEFAULTWIDTH-4));
	valignTxtFn "$CENTEREDTXT"
	showMsgDlg "$ALIGNEDTXT" $HEIGHT
	return $?;
}

function showInstallLogDlg() {
	sed -i 's/\r/\n/g' /tmp/aptstatus
	showTextDlg "/tmp/aptstatus" 15 $(($DEFAULTWIDTH+11));
}

# Shows the categories of packages
# - $1: Array of package categories
function showPackageCategoryListDlg() {
	MENU=()
	IFS=" ";
	ARRAY=($1);
	IFS=$ORIGINALIFS;
	TBLCOLUMNCENTER=0;
	I=0;
	updateAllPackagesListFn;
	for VALUE in ${ARRAY[@]}; do
		I=$(($I+1));
		getPackagesFromCategoryFn $VALUE;
		X=0;
		for PACKAGE in ${PACKAGES[@]}; do
			getPackageStatusFn $PACKAGE;
			if [ $? -eq 1 ]; then
				X=$(($X+1));
			fi
		done
		MENU+=($I",\Zn"$VALUE",("$X"/"${#PACKAGES[@]}")");
	done;
	createTableFn "menu"\
	"#;\Zb"$(_ packages.label.categories)";"$(_ packages.label.installed)\
	"${MENU[@]}";
	
	TBLCOLUMNCENTER=1;
	centerTxtFn "$HEADER" $(($DEFAULTWIDTH+7));
	HEIGHT=$((${#MENU[@]}+8));
	if [ ${#MENU[@]} -gt 15 ]; then
		HEIGHT=15;
	fi
	showMenuDlg "$CENTEREDTXT" "$ROWS" ${#MENU[@]} $HEIGHT
}

# Shows the pacakges inside category
# - $1: Array of packages in this category
function showPackagesListDlg() {
	MENU=()
	IFS=" ";
	ARRAY=($1);
	IFS=$ORIGINALIFS;
	I=0;
	
	TBLCOLUMNCENTER=0;
	for VALUE in ${ARRAY[@]}; do
		I=$(($I+1));
		getPackageStatusFn $VALUE;
		if [ $? -eq 1 ]; then
			MENU+=($I",\Zn"$VALUE",\Z2"$(_ dialog.yes));
		else
			MENU+=($I",\Zn"$VALUE",\Z1"$(_ dialog.no));
		fi
	done;
	createTableFn "menu"\
	"#;\Zb"$(_ packages.label.name)";\Zb"$(_ packages.label.installed)\
	"${MENU[@]}";
	
	TBLCOLUMNCENTER=1;
	centerTxtFn "$HEADER" $(($DEFAULTWIDTH+7));
	HEIGHT=$((${#MENU[@]}+8));
	if [ ${#MENU[@]} -gt 15 ]; then
		HEIGHT=15;
	fi
	showMenuDlg "$CENTEREDTXT" "$ROWS" ${#MENU[@]} $HEIGHT
}

function showPackageOptionsDlg() {
	MENU=()
	IFS=" ";
	IFS=$ORIGINALIFS;
	TBLCOLUMNCENTER=0;
	
	MENU+=(1",\Zn"$(_ packages.label.information));
	MENU+=(2",\Zn"$(_ packages.label.install_update));
	MENU+=(3",\Zn"$(_ packages.label.remove));
	
	createTableFn "menu"\
	"#;\Zb"$(_ packages.label.actions)\
	"${MENU[@]}";

	TBLCOLUMNCENTER=1;
	centerTxtFn "$HEADER" $(($DEFAULTWIDTH+7));
	showMenuDlg "$CENTEREDTXT" "$ROWS" ${#MENU[@]} 11
}

# Shows the package information
# - $1: Information of the package
# -  0: Full package name
# -  1: Available version online
# -  2: Installed size
# -  3: Download size
# -  4: Description
# -  5: Dependencies
function showPackageInfoDlg() {
	PKGINFO=($1);
	MSGTXT=$(_ packages.info.fullname)" ${PKGINFO[0]}\n";
	MSGTXT+=$(_ packages.info.version.available)" ${PKGINFO[1]}\n";
	MSGTXT+=$(_ packages.info.version.installed)" $(getPackageVersionFn $1)\n";
	MSGTXT+=$(_ packages.info.size.download)" ${PKGINFO[3]}\n";
	MSGTXT+=$(_ packages.info.size.installed)" ${PKGINFO[2]}\n";
	MSGTXT+=$(_ packages.info.description)" ${PKGINFO[4]}\n";
	MSGTXT+=$(_ packages.info.dependencies)" ${PKGINFO[5]}\n";
	wrapTxtFn "$MSGTXT" $(($DEFAULTWIDTH+15));
	valignTxtFn "$MSGTXT"
	showMsgDlg "$ALIGNEDTXT" $(($HEIGHT+3)) $(($DEFAULTWIDTH+15))
}
