#!/bin/bash -e
set -e

if [ -v $DEBUG ]; then 
	DEBUG=0
fi



echo "... setting up $DPKG_MAINTSCRIPT_PACKAGE"
		

echo "... setting up $DPKG_MAINTSCRIPT_PACKAGE"
		

debug (){
	if [ $DEBUG = 1 ]; then
		echo -e "$@"
	fi
}

set_mode(){
	local wide=${1%%x*}
	local high=${1##*x}
	if [ $((wide * 3 )) -gt $((high * 4)) ]; then
		aspect="wide"
	elif [ -z $aspect ]||[ $aspect != 'wide' ]; then
		aspect="narrow"
	fi
	if [ ${high} -ge 720 ]; then
		size="large"
	else
		[ -z $size ]||[ $aspect != 'large' ]
		size="small"
	fi
	debug "for screen $1, choose aspect = $aspect, and size = $size"
}

update_boot(){
	if which update-grub2 > /dev/null ; then
		sync
		update-grub2 || true
	fi

	if [ -x /usr/sbin/update-initramfs ]; then
		update-initramfs -u
	fi
}


if dpkg-maintscript-helper supports rm_conffile 2>/dev/null; then
	dpkg-maintscript-helper rm_conffile /etc/kde3/kdeglobals 6.0.1 -- "$@"
fi

# Lets try to determine the best aspect ratio:
drm="/sys/class/drm"
if [ -d $drm ]; then
	for d in $(ls -1d $drm/card*); do
		if [ -f "${d}/status" ] && [ $(cat ${d}/status) = 'connected' ]; then
			debug "getting modes for card $d"
			read dmode < ${d}/modes
			debug $dmode
			set_mode ${dmode}
		fi
	done
fi
#fallback to using the framebuffer modes - useful for vm's
graphics="/sys/class/graphics"
if [ -z $size ] && [ -z $aspect ] && [ -d $graphics ]; then
	for d in $(ls -1d $graphics/fb*) ; do
		debug "parsing mode for framebuffer $d"
		if [ -f $d/modes ]; then
			read dmode < ${d}/modes
			dmode=${dmode##*:}
			dmode=${dmode%%p-*}
			set_mode ${dmode}
		fi
	done
fi

# xfce configs don't get made into link to /etc/alternatives if the file is present.
# Tell me a better way to do this. -fsr
if [ -f /etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml ] ; then
	if ! [ -f /etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml.bak ] ; then
		cp /etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml /etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml.bak
	fi
	rm -f /etc/xdg/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml
fi

if [ -f /etc/xdg/xfce4/panel/default.xml ] ; then
	if ! [ -f /etc/xdg/xfce4/panel/default.xml.bak ] ; then
		cp /etc/xdg/xfce4/panel/default.xml /etc/xdg/xfce4/panel/default.xml.bak
	fi
	rm -f /etc/xdg/xfce4/panel/default.xml 
fi

if [ -f /etc/lightdm/lightdm-gtk-greeter.conf ] ; then
	if ! [ -f /etc/lightdm/lightdm-gtk-greeter.conf.bak ] ; then
		cp /etc/lightdm/lightdm-gtk-greeter.conf /etc/lightdm/lightdm-gtk-greeter.conf.bak
	fi
	rm -f /etc/lightdm/lightdm-gtk-greeter.conf
fi

# Use desktop-base.manifest for setting up the alternatives
prefer_svg="desktop-background desktop-splash desktop-lightdm-background"
if [ "$1" = "configure" -o "$1" = "abort-upgrade" ]; then
	# Alternatives for the background
	while read mline; do
		LINK=""
		D_B_PATH="/usr/share/images/desktop-base"
		TEST_FLAG="-f"
		if [ -z "$mline"  ]; then
			continue
		fi
		set $mline
		flag=$2
		pmod=$3

		case $1 in
			"priority_factor")
				if [ $flag = "autodetect" ]; then
					vname="prio_mod_${aspect}"
					if [ -v $vname ]; then
						mod=${!vname}
						((pmod += mod))
					fi
					debug "setting $vname to $pmod"
					declare -i ${vname}=${pmod}
					vname="prio_mod_${size}"
					if [ -v $vname ]; then
						mod=${!vname}
						((pmod += mod))
					fi
					debug "setting $vname to $pmod"
					declare -i ${vname}=${pmod}
				else
					vname="prio_mod_${flag}"
					if [ -v $vname ]; then
						mod=${!vname}
						((pmod += mod))
					fi
					debug "setting $vname to $pmod"
					declare -i ${vname}=${pmod}
				fi
				;;
			'desktop-grub-theme')
				D_B_PATH="/usr/share/desktop-base/grub-themes"
				TEST_FLAG="-d"
				;;&
			'desktop-slim-theme')
				D_B_PATH="/usr/share/slim/themes"
				TEST_FLAG="-d"
				;;&
			'lightdm-gtk-greeter.conf')
				D_B_PATH="/etc/lightdm"
				LINK="lightdm-gtk-greeter.conf"
				NEEDS_SET="yes"
				;;&
			'xfce4-xsettings.xml')
				D_B_PATH="/etc/xdg/xfce4/xfconf/xfce-perchannel-xml"
				LINK="xsettings.xml"
				NEEDS_SET="yes"
				;;&
			'xfce4-panel.xml')
				D_B_PATH="/etc/xdg/xfce4/panel"
				LINK="default.xml"
				NEEDS_SET="yes"
				;;&
			'xfwm4.xml')
				D_B_PATH="/etc/xdg/xfce4/xfconf/xfce-perchannel-xml"
				LINK="xfwm4.xml"
				NEEDS_SET="yes"
				;;&
			'desktop-background' | \
			'desktop-splash' | \
			'desktop-lightdm-background' | \
			'desktop-background.xml' | \
			'desktop-lightdm-background.xml' | \
			'desktop-grub-theme' | \
			'desktop-slim-theme' | \
			'lightdm-gtk-greeter.conf' | \
			'xfce4-xsettings.xml' | \
			'xfce4-panel.xml' | \
			'xfwm4.xml' ) 
				if [ ${TEST_FLAG} "${D_B_PATH}/$flag" ]; then
					priority=${prio_mod_base};
					i=3
					while [ $i -le $# ]; do
						ivname="prio_mod_${!i}"
						mod="${!ivname}"
						#debug "adding priority modifier ${ivname} of ${mod} to $1" 
						(( priority += mod ))
						(( i++ ))
					done
					if [ ${2##*.} = "svg" ]; then
						for pref in $prefer_svg; do
							if [ $1 = $pref ]; then
								(( priority += prio_mod_svg ))
							fi
						done
					fi
					if [ -z $LINK ]; then
						LINK=$1
					fi
###					# This creates a duplicate link for xfwm4.xml.bak
#					if ! [ -h ${DB_PATH}/${LINK} ]; then   # BACKUP_COMMAND ; use this if use $TEST_FLAG below
#						if [ -f "${D_B_PATH}/$LINK" ]; then
#							mv "${D_B_PATH}/$LINK"  "${D_B_PATH}/${LINK}.bak"
#						fi
#					fi
					debug "Creating alternative $1 for ${D_B_PATH}/$2 to ${D_B_PATH}/$LINK with priority $priority"
					update-alternatives --install \
						${D_B_PATH}/$LINK $1 \
						${D_B_PATH}/$2 $priority
					
					if [ -n "$NEEDS_SET" ] ; then
						debug "Setting stubborn alternative $1 for ${D_B_PATH}/$2" 
						update-alternatives --set \
							$1 ${D_B_PATH}/$2
						unset "$NEEDS_SET"
					fi

				else debug "${D_B_PATH}/$2 doesn't exist.  Not setting as an alternative for $1"
				fi
				;;
			*)
				;;
		esac
	done < "/usr/share/desktop-base/desktop-base.manifest"
	update_boot
fi
