#!/usr/bin/env bash
#
# $Id: pkgfoster,v 1.3.1 2023-12-02 jmq Exp $
# (c) 2005, Jukka Heino <jukka@karsikkopuu.net>
# revised 2023--2025 by John McQuah <jmcquah@disroot.org>
#

PRT_GET=/usr/bin/prt-cache
PKGRM=/usr/bin/pkgrm
RECHECK=1

while [ "$1" ]; do
	case "$1" in
		--rmcommand)
			[ "$2" ] || { echo "$1 needs an argument!"; exit 1; }
			PKGRM="$2"
			command -v "${PKGRM%% *}" >/dev/null || { echo "invalid pkgrm: $PKGRM"; exit 1; } 
			shift ;;
		--getcommand)
			[ "$2" ] || { echo "$1 needs an argument!"; exit 1; }
			PRT_GET="$2"
			command -v "${PRT_GET%% *}" >/dev/null || { echo "invalid prt-get: $PRT_GET"; exit 1; } 
			shift ;;
		*)
			echo "Usage: $0 [--getcommand <cmd>] [--rmcommand <cmd>]"
			exit 1 ;;
	esac
	shift
done

if [ $UID != 0 ]; then
	if command -v doas >/dev/null; then
		PKGRM="doas $PKGRM"
	elif command -v sudo >/dev/null; then
		PKGRM="sudo $PKGRM"
	else
		PKGRM="su -c $PKGRM"
	fi
fi

BASE=$(awk '/^[[:space:]]*prtdir.*\/core/ {print $2}' /etc/prt-get.conf)
CONF="${XDG_CONFIG_HOME:="$HOME/.config"}/pkgfoster.keep"
if [ ! -f "$CONF" ]; then
	mkdir -p "${XDG_CONFIG_HOME}"
	touch "$CONF"
fi

while [ $RECHECK = 1 ] ; do
	echo
	echo "(Re-)checking packages for orphans..."
	RECHECK=0

	mapfile -t orphans < <(comm -23 <($PRT_GET listorphans | sort) \
		<(cat <(find -L "$BASE" -maxdepth 1 -type d -printf "%f\n") "$CONF" \
		| sort -u) )

	for PACKAGE in "${orphans[@]}"; do
		echo
		$PRT_GET info "$PACKAGE"
		echo

		echo -n "Uninstall $PACKAGE? (y/N) "
		read -r ANSWER

		if [ "$ANSWER" = "y" ] ; then
			$PKGRM "$PACKAGE"
			RECHECK=1
		else
			echo "$PACKAGE" >> "$CONF"
		fi
	done
done
