#!/bin/zsh
set -euo pipefail

WORKER_LABEL="${1:-macos-vm}"
VM_NAME="${2:-r5d-macos}"
if [[ ! "$WORKER_LABEL" =~ '^[A-Za-z0-9][A-Za-z0-9_.-]{0,62}$' ]]; then
  print -u2 "Invalid worker label: $WORKER_LABEL"
  exit 2
fi
if [[ ! "$VM_NAME" =~ '^[A-Za-z0-9][A-Za-z0-9_.-]{0,62}$' ]]; then
  print -u2 "Invalid VM name: $VM_NAME"
  exit 2
fi

STATE_DIR="$HOME/Library/Application Support/r5d"
LAUNCH_AGENTS_DIR="$HOME/Library/LaunchAgents"
START_SCRIPT="$STATE_DIR/start-worker.command"
PLIST="$LAUNCH_AGENTS_DIR/dev.r5d.worker-terminal.plist"

mkdir -p "$STATE_DIR" "$LAUNCH_AGENTS_DIR"
chmod 700 "$STATE_DIR"

escaped_start_script="${START_SCRIPT//&/&amp;}"
escaped_start_script="${escaped_start_script//</&lt;}"
escaped_start_script="${escaped_start_script//>/&gt;}"

temporary_start="$(mktemp "$STATE_DIR/.start-worker.XXXXXX")"
temporary_plist="$(mktemp "$LAUNCH_AGENTS_DIR/.dev.r5d.worker-terminal.XXXXXX")"
trap 'rm -f "$temporary_start" "$temporary_plist"' EXIT

sed \
  -e "s|__WORKER_LABEL__|$WORKER_LABEL|g" \
  -e "s|__VM_NAME__|$VM_NAME|g" \
  "${0:A:h}/start-worker.command.template" > "$temporary_start"
chmod 700 "$temporary_start"

sed \
  -e "s|__START_SCRIPT__|$escaped_start_script|g" \
  "${0:A:h}/dev.r5d.worker-terminal.plist.template" > "$temporary_plist"
chmod 600 "$temporary_plist"

mv -f "$temporary_start" "$START_SCRIPT"
mv -f "$temporary_plist" "$PLIST"
trap - EXIT

launchctl bootout "gui/$(id -u)" "$PLIST" >/dev/null 2>&1 || true
launchctl bootstrap "gui/$(id -u)" "$PLIST"
