#!/bin/bash
# Watches the agent's runabout-inbox and injects new messages into their tmux.
# Launched as a child process by Runabout — dies when Runabout closes.
# Usage: runabout-dispatch <agent> <tmux_socket> <tmux_session>

AGENT="$1"
SOCKET="$2"
SESSION="$3"

if [ -z "$AGENT" ] || [ -z "$SOCKET" ] || [ -z "$SESSION" ]; then
  echo "runabout-dispatch: usage: runabout-dispatch <agent> <socket> <session>" >&2
  exit 1
fi

INBOX="/var/lib/$AGENT/runabout-inbox"
mkdir -p "/var/lib/$AGENT"
touch "$INBOX" 2>/dev/null && chmod 666 "$INBOX" 2>/dev/null || true

LAST_LINE=$(wc -l < "$INBOX" 2>/dev/null || echo 0)

while true; do
  inotifywait -e modify,close_write "$INBOX" -qq 2>/dev/null || { sleep 1; continue; }

  CURRENT=$(wc -l < "$INBOX")
  if [ "$CURRENT" -gt "$LAST_LINE" ]; then
    COUNT=$(( CURRENT - LAST_LINE ))
    while IFS= read -r line; do
      [ -z "$line" ] && continue
      if id "$AGENT" &>/dev/null; then
        sudo -u "$AGENT" tmux -S "$SOCKET" send-keys -t "$SESSION" "[RUNABOUT] Ray: $line" 2>/dev/null
        sleep 0.05
        sudo -u "$AGENT" tmux -S "$SOCKET" send-keys -t "$SESSION" "" Enter 2>/dev/null
      else
        sudo tmux -S "$SOCKET" send-keys -t "$SESSION" "[RUNABOUT] Ray: $line" 2>/dev/null
        sleep 0.05
        sudo tmux -S "$SOCKET" send-keys -t "$SESSION" "" Enter 2>/dev/null
      fi
    done < <(tail -n "+$(( LAST_LINE + 1 ))" "$INBOX" | head -n "$COUNT")
    LAST_LINE="$CURRENT"
  fi
done
