# Arch install script for agentx-desktop (pacman .INSTALL)
# User resolution: AGENTX_DESKTOP_USER → SUDO_USER → print instructions.
# Note: pacman -U as root often has empty SUDO_USER; set AGENTX_DESKTOP_USER.

STATE_DIR=/var/lib/agentx
STATE_FILE="${STATE_DIR}/desktop-user"
USER_UNIT=agentx-daemon.service

_agentx_desktop_resolve_user() {
	u=""
	if [ -n "${AGENTX_DESKTOP_USER:-}" ]; then
		u="${AGENTX_DESKTOP_USER}"
	elif [ -n "${SUDO_USER:-}" ]; then
		u="${SUDO_USER}"
	fi
	u=$(printf '%s' "$u" | tr -d '[:space:]')
	if [ -z "$u" ] || [ "$u" = "root" ]; then
		return 1
	fi
	if ! getent passwd "$u" >/dev/null 2>&1; then
		return 1
	fi
	printf '%s' "$u"
}

_agentx_desktop_enable() {
	u="$1"
	uid=$(getent passwd "$u" | cut -d: -f3)
	[ -n "$uid" ] || return 1
	if systemctl --machine="${u}@" --user daemon-reload >/dev/null 2>&1; then
		systemctl --machine="${u}@" --user enable "${USER_UNIT}" >/dev/null 2>&1 || true
		systemctl --machine="${u}@" --user start "${USER_UNIT}" >/dev/null 2>&1 || return 2
	else
		runtime="/run/user/${uid}"
		[ -d "$runtime" ] || return 2
		if command -v runuser >/dev/null 2>&1; then
			runuser -u "$u" -- env "XDG_RUNTIME_DIR=${runtime}" systemctl --user enable "${USER_UNIT}" >/dev/null 2>&1 || true
			runuser -u "$u" -- env "XDG_RUNTIME_DIR=${runtime}" systemctl --user start "${USER_UNIT}" >/dev/null 2>&1 || return 2
		else
			return 2
		fi
	fi
	loginctl enable-linger "$u" >/dev/null 2>&1 || true
	return 0
}

_agentx_desktop_configure() {
	systemctl --global daemon-reload >/dev/null 2>&1 || true
	u=""
	if u=$(_agentx_desktop_resolve_user); then
		:
	elif [ -f "${STATE_FILE}" ]; then
		u=$(tr -d '[:space:]' <"${STATE_FILE}" || true)
		if [ -z "$u" ] || [ "$u" = "root" ] || ! getent passwd "$u" >/dev/null 2>&1; then
			u=""
		fi
	fi
	if [ -z "$u" ]; then
		cat <<EOF
agentx-desktop: could not auto-enable (no non-root install user).

  AGENTX_DESKTOP_USER=alice pacman -U agentx-desktop-*.pkg.tar.zst

Or as your login user:
  systemctl --user enable --now ${USER_UNIT}
  loginctl enable-linger \$USER
EOF
		return 0
	fi
	rc=0
	_agentx_desktop_enable "$u" || rc=$?
	mkdir -p "${STATE_DIR}"
	printf '%s\n' "$u" >"${STATE_FILE}"
	if [ "$rc" -eq 0 ]; then
		echo "agentx-desktop: enabled ${USER_UNIT} for user ${u}"
	else
		echo "agentx-desktop: recorded user ${u}; start after login if needed:"
		echo "  systemctl --user enable --now ${USER_UNIT}"
	fi
}

post_install() { _agentx_desktop_configure; }
post_upgrade() { _agentx_desktop_configure; }

pre_remove() {
	[ -f "${STATE_FILE}" ] || return 0
	u=$(tr -d '[:space:]' <"${STATE_FILE}" || true)
	[ -n "$u" ] && [ "$u" != "root" ] || return 0
	systemctl --machine="${u}@" --user disable --now "${USER_UNIT}" >/dev/null 2>&1 || true
}
