#!/usr/bin/bash

SHOW_HELP=0
USER_MODE=0
ENABLE=0
DISABLE=0
STATUS=0
UNIT=

[ $# -eq 0 ] && SHOW_HELP=1

while [ $# -gt 0 ]; do
	case $1 in
	"-h"|"--help")
		SHOW_HELP=1
		;;
	"--user")
		USER_MODE=1
		;;
	"enable" | "disable" | "status")
		if [ $ENABLE -eq 0 ] && [ $DISABLE -eq 0 ] && [ $STATUS -eq 0 ] && [ -z "$UNIT" ]; then
			[ $1 = "enable" ] && ENABLE=1
			[ $1 = "disable" ] && DISABLE=1
			[ $1 = "status" ] && STATUS=1
		else
			echo "Unexpected argument: $1"
			exit 2
		fi
		;;
	*)
		[ $ENABLE -eq 0 ] && [ $DISABLE -eq 0 ] && [ $STATUS -eq 0 ] && echo "Unrecognized argument: $1" && exit 1
		[ -n "$UNIT" ] && echo "Unexpected argument: $1" && exit 2
		UNIT=$1
		;;
	esac
	shift
done

[ $SHOW_HELP -ne 0 ] && echo "Usage: $(basename $0) [--user] enable|disable|status [UNIT]" && exit 0

[ $STATUS -eq 0 ] && [ -z "$UNIT" ] && echo "UNIT needs to be specified" && exit 3

[ $USER_MODE -ne 0 ] \
	&& UNIT_DIRS="${XDG_RUNTIME_DIR:-/run/user/$UID}/containers/systemd;${XDG_CONFIG_HOME:-$HOME/.config/containers/systemd;/etc/containers/systemd/users/$UID;/etc/containers/systemd/users}" \
	|| UNIT_DIRS="/run/containers/systemd;/etc/containers/systemd;/usr/share/containers/systemd"
[ $USER_MODE -ne 0 ] \
	&& CFG_DIR="${XDG_CONFIG_HOME:-$HOME/.config/containers/systemd}" \
	|| CFG_DIR="/etc/containers/systemd"
[ $USER_MODE -ne 0 ] \
	&& TARGET=default.target \
	|| TARGET=multi-user.target

ENABLE_FILE=$(echo -e "[Install]\nWantedBy=$TARGET\n")
FOUND=0

for DIR in ${UNIT_DIRS//;/ }; do
	[ -n "$UNIT" ] && UNIT_FILES=$DIR/$UNIT || UNIT_FILES=$DIR/*

	for UNIT_FILE in $UNIT_FILES; do
		[ ! -f $UNIT_FILE ] && continue

		FOUND=1
		CUR_UNIT=$(basename $UNIT_FILE)
		CUR_CFG_DIR=$CFG_DIR/$CUR_UNIT.d
		CFG=$CUR_CFG_DIR/enable.conf
		UNSUPPORTED=0
		ENABLED=0

		grep -q "\[Install\]" $UNIT_FILE &&	if [ -n "$UNIT" ]; then
			echo "Unit $UNIT_FILE contains [Install] section" && exit 5
		else
			UNSUPPORTED=1
		fi

		[ $UNSUPPORTED -eq 0 ] && for DIR in ${UNIT_DIRS//;/ }; do
			[ $UNSUPPORTED -eq 0 ] && [ -d $DIR/$CUR_UNIT.d ] && for FILE in $DIR/$CUR_UNIT.d/*; do
				[ $UNSUPPORTED -eq 0 ] && [ -f $FILE ] && if [ "$FILE" = "$CFG" ]; then
					CFG_FILE=$(cat $CFG)
					[ "$CFG_FILE" != "$ENABLE_FILE" ] && if [ -n "$UNIT" ]; then
						echo "Drop-in $FILE was modified" && exit 6
					else
						UNSUPPORTED=1
						continue
					fi
					ENABLED=1
				else
					grep -q "\[Install\]" $FILE && if [ -n "$UNIT" ]; then
						echo "Third-party drop-in $FILE contains [Install] section" && exit 7
					else
						UNSUPPORTED=1
						continue
					fi
				fi
			done
		done

		[ $UNSUPPORTED -eq 1 ] && echo "$CUR_UNIT: unsupported" && continue
		if [ $STATUS -eq 1 ]; then
			[ $ENABLED -eq 1 ] && echo "$CUR_UNIT: enabled" || echo "$CUR_UNIT: disabled"
			[ -n "$UNIT" ] && break
		fi
		[ $ENABLE -eq 1 ] && [ $ENABLED -eq 0 ] && mkdir -p $CUR_CFG_DIR && echo "$ENABLE_FILE" > $CFG && echo "$CUR_UNIT: enabled" && break
		[ $DISABLE -eq 1 ] && [ $ENABLED -eq 1 ] && rm $CFG && echo "$CUR_UNIT: disabled" && if [ ! -f $CUR_CFG_DIR/* ]; then
			rmdir $CUR_CFG_DIR
		fi && break
	done
done

[ $FOUND -eq 0 ] && if [ -n "$UNIT" ]; then
	echo "$UNIT" not found
else
	echo "No units found"
fi && exit 8

exit 0
