#!/bin/bash
# vim: cindent:shiftwidth=4:tabstop=4:smarttab:textwidth=100

function PACKAGE_STATE_INCONSISTENT {
	local PACKAGE_NAMES_LIST="$1"
	PACKAGE_NAMES=( $( tr ';' ' ' <<< "$PACKAGE_NAMES_LIST" ) )

	declare -r RCD_SUPPRESS_SCRIPT='/usr/sbin/policy-rc.d'
	declare -r RCD_SUPPRESS_CODE='exit 101'

	declare -i ERROR_COUNT=0
	for PACKAGE_NAME in ${PACKAGE_NAMES[@]}; do
		STATUS=$(dpkg-query --show --showformat='${Status}' $PACKAGE_NAME)

		case $STATUS in
			'install ok half-configured')
				echo $RCD_SUPPRESS_CODE > $RCD_SUPPRESS_SCRIPT &&
				chmod +x $RCD_SUPPRESS_SCRIPT &&
				dpkg --configure $PACKAGE_NAME &&
				rm $RCD_SUPPRESS_SCRIPT
				ERROR_COUNT=$((ERROR_COUNT+$?))
				;;
			'deinstall ok config-files')
				dpkg --purge $PACKAGE_NAME
				ERROR_COUNT=$((ERROR_COUNT+$?))
				;;
			*)
				echo "$PACKAGE_NAME: unknown status"
				ERROR_COUNT=$((ERROR_COUNT+1))
				;;
		esac
	done
	return $ERROR_COUNT
}

function CONFIGURATION_FILE_OBSOLETE {
	local FILE_NAMES_LIST="$1"
	FILE_NAMES=( $( tr ';' ' ' <<< "$FILE_NAMES_LIST" ) )

	declare -i ERROR_COUNT=0
	for FILE_NAME in ${FILE_NAMES[@]}; do
		case $FILE_NAME in
			*.dpkg-old|*.dpkg-bak|*.dpkg-dist)
				rm --verbose "$FILE_NAME"
				ERROR_COUNT=$((ERROR_COUNT+$?))
				;;
			*)
				echo "$FILE_NAME: unrecognized extension"
				ERROR_COUNT=$((ERROR_COUNT+1))
				;;
		esac
	done
	return $ERROR_COUNT
}

function LEFTOVER_POLICY {
	local FILE_NAME="$1"

	test -s "$FILE_NAME"
	rm "$FILE_NAME"
}
