#!/usr/bin/env bash
# test.sh — Validation end-to-end du skill agent-delegation et de ask-agent
#
# Usage : bash test.sh
# Doit tourner sur storage-01 (ou depuis le poste perso via SSH)
#
# Vérifie :
#   1. ask-agent CLI disponible et fonctionnel (system, monitor, brain)
#   2. Skill agent-delegation présent dans le profil funk-ai
#   3. Hermes funk-ai appelle réellement Terminal: ask-agent quand demandé

set -uo pipefail

PASS=0
FAIL=0
SKIP=0

green() { echo -e "\033[32m✓ $*\033[0m"; }
red()   { echo -e "\033[31m✗ $*\033[0m"; }
yellow(){ echo -e "\033[33m~ $*\033[0m"; }

pass() { green "$1"; ((PASS++)); }
fail() { red   "$1"; ((FAIL++)); }
skip() { yellow "$1 (SKIP)"; ((SKIP++)); }

echo ""
echo "═══════════════════════════════════════════════════════"
echo "  Test agent-delegation + ask-agent — Funk Cluster"
echo "═══════════════════════════════════════════════════════"
echo ""

# ── Test 1 : ask-agent disponible ────────────────────────────────────────────
echo "▸ [1] ask-agent CLI disponible sur storage-01"
if command -v ask-agent &>/dev/null; then
    pass "ask-agent trouvé : $(which ask-agent)"
else
    fail "ask-agent introuvable dans PATH"
fi

# ── Test 2 : LiteLLM accessible ──────────────────────────────────────────────
echo "▸ [2] LiteLLM proxy accessible (127.0.0.1:4000)"
if curl -sf -o /dev/null http://127.0.0.1:4000/health -H "Authorization: Bearer lm-studio"; then
    pass "LiteLLM répond"
else
    fail "LiteLLM inaccessible — vérifier : sudo systemctl status litellm"
fi

# ── Test 3 : ask-agent system ─────────────────────────────────────────────────
echo "▸ [3] ask-agent system — réponse non vide"
RESP=$(ask-agent system "Réponds juste: OK" --max-tokens 200 2>&1) || true
if [ -n "$RESP" ] && echo "$RESP" | grep -qiv "error\|failed\|curl"; then
    pass "ask-agent system répond : ${RESP:0:80}..."
else
    fail "ask-agent system a échoué : $RESP"
fi

# ── Test 4 : ask-agent monitor ────────────────────────────────────────────────
echo "▸ [4] ask-agent monitor — réponse non vide"
RESP=$(ask-agent monitor "Réponds juste: OK" --max-tokens 200 2>&1) || true
if [ -n "$RESP" ] && echo "$RESP" | grep -qiv "error\|failed\|curl"; then
    pass "ask-agent monitor répond : ${RESP:0:80}..."
else
    fail "ask-agent monitor a échoué : $RESP"
fi

# ── Test 5 : ask-agent brain ──────────────────────────────────────────────────
echo "▸ [5] ask-agent brain — réponse non vide"
if curl -sf http://127.0.0.1:4000/v1/models -H "Authorization: Bearer lm-studio" | grep -q "claude"; then
    RESP=$(ask-agent brain "Réponds juste: OK" --max-tokens 200 2>&1) || true
    if [ -n "$RESP" ] && echo "$RESP" | grep -qiv "error\|failed\|curl"; then
        pass "ask-agent brain répond : ${RESP:0:80}..."
    else
        fail "ask-agent brain a échoué : $RESP"
    fi
else
    skip "ask-agent brain — claude-sonnet non disponible dans LiteLLM"
fi

# ── Test 6 : ask-agent avec données réelles ───────────────────────────────────
echo "▸ [6] ask-agent monitor — analyse données système réelles"
DISK=$(df -h /srv/data | tail -1)
RESP=$(ask-agent monitor "Est-ce que cette utilisation disque est critique ? $DISK — réponds en une phrase." --max-tokens 100 2>&1) || true
if [ -n "$RESP" ] && echo "$RESP" | grep -qiv "error\|failed\|curl"; then
    pass "ask-agent monitor analyse données réelles : ${RESP:0:120}..."
else
    fail "ask-agent monitor analyse échouée : $RESP"
fi

# ── Test 7 : Skill dans répertoire global HERMES_HOME ────────────────────────
echo "▸ [7] Skill agent-delegation dans HERMES_HOME/skills/"
SKILL_GLOBAL="${HERMES_HOME:-/srv/data/hermes}/skills/funk/agent-delegation/SKILL.md"
if [ -f "$SKILL_GLOBAL" ]; then
    pass "Skill global : $SKILL_GLOBAL"
else
    fail "Skill absent : $SKILL_GLOBAL"
fi

# ── Test 8 : Skill dans le profil funk-ai ────────────────────────────────────
echo "▸ [8] Skill agent-delegation dans profil funk-ai"
SKILL_PROFILE="${HERMES_HOME:-/srv/data/hermes}/profiles/funk-ai/skills/funk/agent-delegation/SKILL.md"
if [ -f "$SKILL_PROFILE" ]; then
    pass "Skill profil : $SKILL_PROFILE"
else
    fail "Skill absent du profil — copier et redémarrer hermes-agent"
fi

# ── Test 9 : Skill enabled dans hermes skills list ───────────────────────────
echo "▸ [9] Skill agent-delegation enabled dans hermes skills list"
HERMES_BIN="${HOME:-/opt/hermes}/.local/bin/hermes"
if [ -x "$HERMES_BIN" ]; then
    STATUS=$(HERMES_HOME="${HERMES_HOME:-/srv/data/hermes}" "$HERMES_BIN" skills list 2>/dev/null | grep "agent-delegation" || echo "")
    if echo "$STATUS" | grep -q "enabled"; then
        pass "Skill enabled : $STATUS"
    else
        fail "Skill non trouvé ou disabled dans hermes skills list"
    fi
else
    skip "hermes binaire introuvable : $HERMES_BIN"
fi

# ── Test 10 : Hermes funk-ai appelle Terminal ask-agent ───────────────────────
echo "▸ [10] Hermes funk-ai appelle Terminal: ask-agent (test fonctionnel)"
if [ -x "$HERMES_BIN" ]; then
    RESP=$(HERMES_HOME="${HERMES_HOME:-/srv/data/hermes}" bash -c \
        "cd ${HERMES_HOME:-/srv/data/hermes} && $HERMES_BIN -z \
        'Exécute via ton outil terminal exactement cette commande et affiche le résultat brut : ask-agent system \"Réponds OK\"' \
        2>/dev/null") || true

    # Vérifier dans la dernière session que le tool terminal a été appelé avec ask-agent
    LAST_SESSION=$(ls -t "${HERMES_HOME:-/srv/data/hermes}/profiles/funk-ai/sessions/session_"*.json 2>/dev/null | head -1)
    if [ -n "$LAST_SESSION" ]; then
        TOOL_CALL=$(python3 -c "
import json
with open('$LAST_SESSION') as f:
    data = json.load(f)
for msg in data.get('messages', []):
    if msg.get('role') == 'tool':
        content = msg.get('content', '')
        if 'ask-agent' in content or 'OK' in content:
            print('FOUND')
            break
" 2>/dev/null || echo "")
        if [ "$TOOL_CALL" = "FOUND" ]; then
            pass "Hermes a appelé Terminal: ask-agent et reçu une réponse"
        else
            # Fallback : vérifier juste que la réponse contient OK
            if echo "$RESP" | grep -qi "OK"; then
                pass "Hermes a obtenu la réponse ask-agent : ${RESP:0:100}"
            else
                fail "Hermes n'a pas appelé ask-agent via Terminal — réponse : ${RESP:0:200}"
            fi
        fi
    else
        skip "Impossible de lire la session — test de session ignoré"
    fi
else
    skip "hermes binaire introuvable — test fonctionnel ignoré"
fi

# ── Résumé ────────────────────────────────────────────────────────────────────
echo ""
echo "═══════════════════════════════════════════════════════"
echo "  Résultats : ✓ $PASS passés  ✗ $FAIL échoués  ~ $SKIP ignorés"
echo "═══════════════════════════════════════════════════════"
echo ""

if [ $FAIL -gt 0 ]; then
    exit 1
fi
