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

ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
SCRIPT="$ROOT/install.sh"
TESTROOT="${XDG_CACHE_HOME:-$HOME/.cache}/overdeck/tests/collector-install/run-$$-$RANDOM"
HOME_DIR="$TESTROOT/home"
BACKEND="$TESTROOT/backend"
BIN="$TESTROOT/bin"
mkdir -p "$HOME_DIR" "$BIN" "$BACKEND/collector/releases/$(printf 'a%.0s' {1..40})/bin"
trap 'rm -rf "$TESTROOT"' EXIT
SHA=$(printf 'a%.0s' {1..40})
printf '#!/usr/bin/env bash\nexit 0\n' >"$BACKEND/collector/releases/$SHA/bin/start"
chmod +x "$BACKEND/collector/releases/$SHA/bin/start"
ln -s "releases/$SHA" "$BACKEND/collector/current"

cat >"$BIN/bun" <<'SH'
#!/usr/bin/env bash
exit 0
SH
cat >"$BIN/systemctl" <<'SH'
#!/usr/bin/env bash
printf '%s\n' "$*" >>"$SYSTEMCTL_LOG"
if [[ " $* " == *" is-enabled "* ]]; then exit 1; fi
exit 0
SH
chmod +x "$BIN/bun" "$BIN/systemctl"

HOME="$HOME_DIR" PATH="$BIN:$PATH" SYSTEMCTL_LOG="$TESTROOT/systemctl.log" \
  OVERDECK_BACKEND_RELEASE_ROOT="$BACKEND" bash "$SCRIPT" >"$TESTROOT/output"
unit="$HOME_DIR/.config/systemd/user/overdeck-collector.service"
boost_unit="$HOME_DIR/.config/systemd/user/overdeck-collector-startup-boost.service"
if grep -qxF "WorkingDirectory=$BACKEND/collector/current" "$unit" \
  && grep -qxF "ExecStart=$BACKEND/collector/current/bin/start" "$unit" \
  && grep -qxF "Environment=OVERDECK_BUN_BIN=$BIN/bun" "$unit" \
  && ! grep -q '__COLLECTOR_CURRENT__\|__BUN_BIN__\|/collector/src/index.ts' "$unit" \
  && grep -qxF 'RuntimeMaxSec=120' "$boost_unit" \
  && grep -qxF 'ExecStart=/usr/bin/systemctl --user set-property --runtime overdeck-collector.service CPUQuota=100%%' "$boost_unit" \
  && grep -qxF 'ExecStop=/usr/bin/systemctl --user set-property --runtime overdeck-collector.service CPUQuota=25%%' "$boost_unit" \
  && grep -qx -- '--user daemon-reload' "$TESTROOT/systemctl.log"; then
  printf 'collector-install-release: all checks passed\n'
  exit 0
fi
printf 'collector-install-release: installed unit did not use immutable current\n' >&2
exit 1
