#!/bin/bash
# Install aerostack-exec-daemon as a macOS LaunchAgent.
# Run after: npm install -g @aerostack/gateway
# Usage: AEROSTACK_WORKSPACE_URL=https://... AEROSTACK_TOKEN=mwt_... install-exec-daemon.sh

set -e

WORKSPACE_URL="${AEROSTACK_WORKSPACE_URL:-}"
TOKEN="${AEROSTACK_TOKEN:-}"

if [ -z "$WORKSPACE_URL" ] || [ -z "$TOKEN" ]; then
    # Try to read from OpenClaw MCP config
    OPENCLAW_CONFIG="$HOME/.openclaw/openclaw.json"
    if [ -f "$OPENCLAW_CONFIG" ]; then
        WORKSPACE_URL=$(python3 -c "import json,sys; c=json.load(open('$OPENCLAW_CONFIG')); print(c.get('mcp',{}).get('servers',{}).get('notification',{}).get('env',{}).get('AEROSTACK_WORKSPACE_URL',''))" 2>/dev/null)
        TOKEN=$(python3 -c "import json,sys; c=json.load(open('$OPENCLAW_CONFIG')); print(c.get('mcp',{}).get('servers',{}).get('notification',{}).get('env',{}).get('AEROSTACK_TOKEN',''))" 2>/dev/null)
    fi
fi

if [ -z "$WORKSPACE_URL" ] || [ -z "$TOKEN" ]; then
    echo "ERROR: AEROSTACK_WORKSPACE_URL and AEROSTACK_TOKEN must be set (or configured in OpenClaw)"
    exit 1
fi

NODE_BIN="$(which node)"
DAEMON_BIN="$(which aerostack-exec-daemon)"
PLIST_PATH="$HOME/Library/LaunchAgents/dev.aerostack.exec-daemon.plist"
LOG_DIR="$HOME/.aerostack/logs"

mkdir -p "$LOG_DIR"

cat > "$PLIST_PATH" << EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>dev.aerostack.exec-daemon</string>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
    <key>ThrottleInterval</key>
    <integer>5</integer>
    <key>ProgramArguments</key>
    <array>
      <string>$NODE_BIN</string>
      <string>$DAEMON_BIN</string>
    </array>
    <key>EnvironmentVariables</key>
    <dict>
      <key>AEROSTACK_WORKSPACE_URL</key>
      <string>$WORKSPACE_URL</string>
      <key>AEROSTACK_TOKEN</key>
      <string>$TOKEN</string>
      <key>HOME</key>
      <string>$HOME</string>
      <key>PATH</key>
      <string>$(dirname "$NODE_BIN"):/usr/local/bin:/usr/bin:/bin</string>
    </dict>
    <key>StandardOutPath</key>
    <string>$LOG_DIR/exec-daemon.log</string>
    <key>StandardErrorPath</key>
    <string>$LOG_DIR/exec-daemon.err.log</string>
  </dict>
</plist>
EOF

# Load / reload
launchctl unload "$PLIST_PATH" 2>/dev/null || true
launchctl load "$PLIST_PATH"

echo "Installed: dev.aerostack.exec-daemon"
echo "Logs: $LOG_DIR/exec-daemon.log"
echo "Status: launchctl list dev.aerostack.exec-daemon"
