#!/usr/bin/env bash
set -euo pipefail

if [[ ${EUID:-0} -ne 0 ]]; then
	echo "This script must run as root." >&2
	exit 1
fi

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
UNIT_NAME="uce.service"
UNIT_SOURCE="$SCRIPT_DIR/uce.service"
if [[ ( "$REPO_ROOT" == "/usr/lib/uce" || "$REPO_ROOT" == "/opt/uce" ) && -f "$REPO_ROOT/scripts/deb/uce.service" ]]; then
	UNIT_SOURCE="$REPO_ROOT/scripts/deb/uce.service"
fi
UNIT_DEST="/etc/systemd/system/$UNIT_NAME"
CONFIG_SOURCE="$REPO_ROOT/etc/uce/settings.cfg"
CONFIG_DEST="/etc/uce/settings.cfg"

action="${1:-setup}"

render_runtime_file() {
	local source="$1"
	local destination="$2"
	local mode="$3"
	local tmp
	tmp="$(mktemp)"
	trap 'rm -f "$tmp"' RETURN
	sed "s#/Code/uce.openfu.com/uce#$REPO_ROOT#g" "$source" > "$tmp"
	install -D -m "$mode" "$tmp" "$destination"
	rm -f "$tmp"
	trap - RETURN
}

install_unit() {
	render_runtime_file "$UNIT_SOURCE" "$UNIT_DEST" 0644
	if [[ ! -f "$CONFIG_DEST" ]]; then
		render_runtime_file "$CONFIG_SOURCE" "$CONFIG_DEST" 0644
	fi
	systemctl daemon-reload
}

case "$action" in
	install)
		install_unit
		;;
	setup)
		install_unit
		systemctl enable --now "$UNIT_NAME"
		;;
	enable)
		install_unit
		systemctl enable "$UNIT_NAME"
		;;
	start|stop|restart|status)
		systemctl "$action" "$UNIT_NAME"
		;;
	logs)
		lines="${2:-100}"
		journalctl -u "$UNIT_NAME" -n "$lines" --no-pager
		;;
	*)
		echo "Usage: $0 [install|setup|enable|start|stop|restart|status|logs [lines]]" >&2
		exit 1
		;;
esac
