#!/bin/bash
# Hermes Node Protocol
# Copyright (c) 2026 Stefy (nextime) Lanza <stefy@nexlab.net>
# All rights reserved.
# 
# This software is released under the MIT License with a copyleft clause.
# See the LICENSE file for full terms.
# Hermes Node Agent Installer — Linux Version
# Installs the Hermes Node Agent as a SysV init service
# Requires: bash, Python 3, pip, root (for service)

set -e

echo "=== Hermes Node Agent Installer (Linux) ==="
echo ""

# Check if running as root (for service setup)
if [ "$EUID" -eq 0 ]; then 
    RUN_AS_ROOT=true
else
    RUN_AS_ROOT=false
    echo "⚠️  Not running as root — skipping service installation."
    echo "   To install as a service, run: sudo $0"
    echo ""
fi

# Check for Python 3
if ! command -v python3 &> /dev/null; then
    echo "❌ ERROR: Python 3 is required but not found."
    exit 1
fi
echo "✓ Python: $(python3 --version)"

# Check for pip
if ! command -v pip3 &> /dev/null; then
    echo "❌ ERROR: pip3 is required but not found."
    if [ "$RUN_AS_ROOT" = true ]; then
        echo "   Install with: apt install python3-pip"
    else
        echo "   Install with: pip install --user websockets"
    fi
    exit 1
fi

# Install websockets library
echo "[1/5] Installing Python dependencies..."
pip3 install --quiet websockets 2>/dev/null || pip install --quiet websockets
if [ $? -ne 0 ]; then
    echo "❌ Failed to install websockets. Try: pip3 install websockets"
    exit 1
fi
echo "✓ websockets library installed"

# Determine install locations
if [ "$RUN_AS_ROOT" = true ]; then
    AGENT_DIR="/usr/local/bin"
    CONFIG_DIR="/etc/hermes-node"
    SERVICE_FILE="$(pwd)/node-agent/hermes-node-agent.init.d"
else
    AGENT_DIR="$HOME/.local/bin"
    CONFIG_DIR="$HOME/.config/hermes-node"
    SERVICE_FILE=""
fi

mkdir -p "$AGENT_DIR"
mkdir -p "$CONFIG_DIR"

# Copy agent script
echo "[2/5] Installing agent script..."
cp "$(pwd)/node-agent/hermes_node_agent.py" "$AGENT_DIR/hermes-node-agent"
chmod +x "$AGENT_DIR/hermes-node-agent"
echo "✓ Installed: $AGENT_DIR/hermes-node-agent"

# Create config file if missing
echo "[3/5] Checking configuration..."
if [ ! -f "$CONFIG_DIR/config.json" ]; then
    echo "[4/5] Creating config file..."
    TOKEN=$(python3 -c "import secrets; print(secrets.token_hex(16))")
    cat > "$CONFIG_DIR/config.json" << EOF
{
  "gateway_url": "ws://YOUR-GATEWAY-HOST:8765",
  "node_name": "$(hostname)",
  "token": "$TOKEN",
  "sexec_path": "$HOME/.openclaw/skills/sexec/sexec.sh",
  "reconnect_interval": 5,
  "heartbeat_interval": 30
}
EOF
    echo "✓ Config: $CONFIG_DIR/config.json"
    echo ""
    echo "⚠️  IMPORTANT: Edit $CONFIG_DIR/config.json"
    echo "   → Set gateway_url to your gateway (e.g., wss://zeiss:8765)"
    echo "   → Set token to match gateway's token for this node"
else
    echo "[4/5] Config already exists → skipping"
    echo "   Config: $CONFIG_DIR/config.json"
fi

# Install SysV init service (root only)
if [ "$RUN_AS_ROOT" = true ] && [ -f "$SERVICE_FILE" ]; then
    echo "[5/5] Installing SysV init service..."
    cp "$SERVICE_FILE" /etc/init.d/hermes-node-agent
    chmod +x /etc/init.d/hermes-node-agent
    update-rc.d hermes-node-agent defaults 2>/dev/null || true
    echo "✓ Service: /etc/init.d/hermes-node-agent"
    echo ""
    echo "Service commands:"
    echo "  /etc/init.d/hermes-node-agent start|stop|restart|status"
else
    echo "[5/5] Skipping service installation (not root)"
    echo ""
fi

echo "=== Installation Complete ==="
echo ""
echo "Next steps:"
echo "  1. Edit config:  $CONFIG_DIR/config.json"
echo "  2. Start agent: $AGENT_DIR/hermes-node-agent --config $CONFIG_DIR/config.json"
echo "  3. Verify logs: tail -f /tmp/hermes-node-agent.log"
echo ""
echo "For Windows nodes, see WINDOWS_INSTALL.md"
echo "For full deployment guide, see DEPLOYMENT.md"
