#!/usr/bin/env bash
# ============================================================
# Hermes Bundle Installer — ac.hyukii.my.id
# Install Hermes stack lengkap dari bundle ke /root/.hermes
# ============================================================
set -e

BUNDLE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
TARGET="${1:-/root/.hermes}"
PARTS="$BUNDLE_DIR/parts"

echo "╔══════════════════════════════════════════════╗"
echo "║   HERMES BUNDLE INSTALLER                    ║"
echo "║   Bundle : $BUNDLE_DIR"
echo "║   Target : $TARGET"
echo "╚══════════════════════════════════════════════╝"
echo ""

# --- cek space ---
NEED_GB=6
AVAIL_GB=$(df -BG "$(dirname "$TARGET")" | tail -1 | awk '{print $4}' | tr -d 'G')
echo "Space needed : ~${NEED_GB}GB"
echo "Space avail  : ${AVAIL_GB}GB"
if [ "$AVAIL_GB" -lt "$NEED_GB" ]; then
    echo "!! SPACE KURANG. Butuh minimal ${NEED_GB}GB free."; exit 1
fi

# --- cek semua parts ada ---
echo ""
echo "[1/6] Cek integritas bundle..."
REQUIRED=(
    "parts/hermes-agent.tar.gz"
    "parts/tools-runtimes-a.tar.gz"
    "parts/tools-runtimes-b.tar.gz"
    "parts/tools-misc.tar.gz"
    "parts/cache-clean.tar.gz"
    "parts/rest.tar.gz"
)
MISSING=0
for f in "${REQUIRED[@]}"; do
    if [ ! -f "$BUNDLE_DIR/$f" ]; then
        echo "  MISSING: $f"; MISSING=1
    else
        SZ=$(du -h "$BUNDLE_DIR/$f" | cut -f1)
        echo "  OK  $f  ($SZ)"
    fi
done
[ "$MISSING" -eq 1 ] && { echo "Bundle gak lengkap, batal."; exit 1; }

# --- backup existing ---
if [ -d "$TARGET" ]; then
    echo ""
    echo "[2/6] Backup existing $TARGET ..."
    BK="${TARGET}.bak.$(date +%Y%m%d_%H%M%S)"
    mv "$TARGET" "$BK"
    echo "  dipindah ke: $BK"
else
    echo ""
    echo "[2/6] Gak ada existing install — fresh install"
fi

mkdir -p "$TARGET"

# --- extract parts ---
echo ""
echo "[3/6] Extract core (hermes-agent)..."
tar xzf "$PARTS/hermes-agent.tar.gz" -C "$TARGET"

echo "[4/6] Extract tools (runtimes)..."
tar xzf "$PARTS/tools-runtimes-a.tar.gz" -C "$TARGET"
tar xzf "$PARTS/tools-runtimes-b.tar.gz" -C "$TARGET"
tar xzf "$PARTS/tools-misc.tar.gz" -C "$TARGET"

echo "[5/6] Extract cache + rest..."
tar xzf "$PARTS/cache-clean.tar.gz" -C "$TARGET"
tar xzf "$PARTS/rest.tar.gz" -C "$TARGET"

# --- restore backup DB (opsional) ---
if [ -f "$BUNDLE_DIR/00-backup/state-db.tar.gz" ]; then
    echo ""
    echo "[6/6] Restore state DB dari backup..."
    tar xzf "$BUNDLE_DIR/00-backup/state-db.tar.gz" -C "$TARGET" 2>/dev/null || echo "  (skip db restore)"
else
    echo ""
    echo "[6/6] Gak ada backup DB — fresh state"
fi

# --- symlink tools ---
echo ""
echo "Setup tool symlinks..."
mkdir -p /root/bin
for d in "$TARGET"/tools/python-* "$TARGET"/tools/node-*; do
    [ -d "$d/bin" ] || continue
    for b in "$d"/bin/*; do
        [ -x "$b" ] && ln -sf "$b" /root/bin/ 2>/dev/null || true
    done
done
ln -sf "$TARGET/tools/uv-0.12.3-linux-x64/uv" /root/bin/uv 2>/dev/null || true
ln -sf "$TARGET/tools/ripgrep-15.2.0-linux-x64/rg" /root/bin/rg 2>/dev/null || true
export PATH="/root/bin:$PATH"
grep -q '/root/bin' /root/.bashrc 2>/dev/null || echo 'export PATH="/root/bin:$PATH"' >> /root/.bashrc

# --- verifikasi ---
echo ""
echo "╔══════════════════════════════════════════════╗"
echo "║   VERIFIKASI                                 ║"
echo "╚══════════════════════════════════════════════╝"
echo "  install dir : $(du -sh "$TARGET" 2>/dev/null | cut -f1)"
echo "  hermes-agent: $([ -d "$TARGET/hermes-agent" ] && echo OK || echo MISSING)"
echo "  config.yaml : $([ -f "$TARGET/config.yaml" ] && echo OK || echo MISSING)"
echo "  jailbreaks  : $([ -d "$TARGET/jailbreaks" ] && echo OK || echo MISSING)"
echo "  plugins     : $([ -d "$TARGET/plugins" ] && echo OK || echo MISSING)"
echo "  skills      : $([ -d "$TARGET/skills" ] && echo OK || echo MISSING)"
echo "  state.db    : $([ -f "$TARGET/state.db" ] && echo OK || echo MISSING)"
echo ""
echo "DONE. Next step:"
echo "  cd $TARGET"
echo "  ./hermes-agent/hermes --help    # atau: hermes gateway start"
echo ""
echo "  Config: $TARGET/config.yaml"
echo "  .env   : $TARGET/.env  (cek API keys)"
