#!/bin/sh

# Sort dirs in reverse order to prefer a higher version if the user installed
# multiple versions at once.
for dir in $(printf '%s\n' "$@" | sort -r); do
	[ -f "$dir" ] && continue
	pgver=${dir#*postgresql}
	expr "$pgver" : '[0-9]*$' >/dev/null || continue

	case "$dir" in
		# This is needed for creating man pages symlinks after a -doc
		# package is installed.
		/usr/share/postgresql[0-9]*)
				pg_versions fix
				continue
		;;
		/usr/libexec/postgresql[0-9]*)
			# 1. If the default version is already linked and provides postgres server.
			if [ -f /usr/libexec/postgresql/postgres ]; then
				pg_versions fix

			# 2. If the default version is already linked and both the default version
			#    and the affected version provides only client programs.
			elif [ -f /usr/libexec/postgresql/psql ] && ! [ -f "$dir"/postgres ]; then
				pg_versions fix

			# 3. If a new version has been installed and no default version has been
			#    set yet or the new version provides postgres server while the current
			#    default does not.
			elif [ -f "$dir"/psql ]; then
				echo "* Setting postgresql$pgver as the default version" >&2
				pg_versions set-default "$pgver"

			# 4. If the default version has not been set yet or it was uninstalled
			#    and there is some postgresql version installed.
			elif pg_versions list -q >/dev/null; then
				pgver=$(pg_versions list | head -n1)
				echo "* Setting postgresql$pgver as the default version" >&2

			# 5. There's no postgresql version installed.
			else
				pg_versions uninstall
			fi
		;;
		*)
			continue
		;;
	esac
done


# APK cannot offer the user an upgrade to a newer major version because it's
# provided by a different package. Thus we use this trigger and inform the user
# about a new major version if the current default version is not the latest.

# Find the latest available major version.
latest_ver=$(apk list -Pa postgresql \
             	| sed -En 's/.*\{postgresql([0-9]+)\}.*/\1/p' \
             	| sort | tail -n1) || exit 0

default_ver=$(pg_versions get-default -q) || exit 0

if [ "$latest_ver" ] && [ "$default_ver" -lt "$latest_ver" ]; then
	cat >&2 <<-EOF
	*
	* You are using 'postgresql$default_ver'. It's recommended to upgrade to the latest
	* major version provided by package 'postgresql$latest_ver'.
	* Use command 'pg_versions' to switch between versions.
	*
	EOF
fi

exit 0
