#!/usr/bin/env bash
# Installs the overdeck-controller systemd --user unit. Does NOT enable or start it —
# that is an explicit separate step the operator runs themselves.
set -euo pipefail

script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
backend_root="${OVERDECK_BACKEND_RELEASE_ROOT:-${XDG_STATE_HOME:-$HOME/.local/state}/overdeck/backend}"
controller_current="${backend_root}/controller/current"
unit_src="${script_dir}/overdeck-controller.service"
unit_dest_dir="${HOME}/.config/systemd/user"
unit_dest="${unit_dest_dir}/overdeck-controller.service"

bun_bin="$(command -v bun || true)"
if [[ -z "${bun_bin}" ]]; then
  echo "error: bun is not on PATH — install bun before running this script" >&2
  exit 1
fi

if [[ ! -x "${controller_current}/bin/start" ]]; then
  echo "error: ${controller_current}/bin/start not found — stage and seed a controller release first" >&2
  exit 1
fi

rendered="$(sed \
  -e "s#__CONTROLLER_CURRENT__#${controller_current}#g" \
  -e "s#__BUN_BIN__#${bun_bin}#g" \
  "${unit_src}")"

if [[ "${OVERDECK_INSTALL_CONTROLLER_DRY_RUN:-}" == "1" ]]; then
  printf '%s\n' "${rendered}"
  exit 0
fi

mkdir -p "${unit_dest_dir}"
printf '%s\n' "${rendered}" > "${unit_dest}"

systemctl --user daemon-reload

echo "Installed ${unit_dest}"
echo "Not enabled and not started. To run it:"
echo "  systemctl --user enable --now overdeck-controller.service"
