#!/usr/bin/env bash
# cb26-smoke-test.sh - Basic smoke tests for CyberBrain26
set -uo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
cd "$PROJECT_ROOT"

FAILED=0
TOTAL=0

pass() { echo "✓ PASS: $1"; TOTAL=$((TOTAL + 1)); }
fail() { echo "✗ FAIL: $1"; TOTAL=$((TOTAL + 1)); FAILED=$((FAILED + 1)); }

echo "=== CyberBrain26 Smoke Tests ==="
echo "Project root: $PROJECT_ROOT"
echo "Date: $(date -Iseconds)"
echo ""

echo "--- Git ---"
if git rev-parse --git-dir >/dev/null 2>&1; then
    pass "git repository valid"
else
    fail "git repository invalid"
fi

echo ""
echo "--- LiteLLM proxy ---"
PROXY_URL="${CB26_PROXY_URL:-http://127.0.0.1:4000}"
PROXY_KEY="${CB26_PROXY_KEY:-sk-cb26-local}"

HTTP_CODE=$(curl -fsS -o /tmp/cb26_models.json -w "%{http_code}" \
    "$PROXY_URL/v1/models" \
    -H "Authorization: Bearer $PROXY_KEY" 2>/dev/null || echo "000")

if [ "$HTTP_CODE" = "200" ]; then
    pass "proxy /v1/models HTTP 200"
else
    fail "proxy /v1/models HTTP $HTTP_CODE"
fi

echo ""
echo "--- ChromaDB ---"
DB_PATH="${CB26_DB_PATH:-$PROJECT_ROOT/workspace/chroma_db}"
if [ -d "$DB_PATH" ]; then
    pass "ChromaDB directory exists"
else
    fail "ChromaDB directory missing"
fi

echo ""
echo "--- ttyd ---"
TTYD_URL="${CB26_TTYD_URL:-http://127.0.0.1:31004}"
TTYD_CODE=$(curl -fsS -o /dev/null -w "%{http_code}" "$TTYD_URL" 2>/dev/null || echo "000")
if [ "$TTYD_CODE" = "200" ]; then
    pass "ttyd HTTP 200"
else
    fail "ttyd HTTP $TTYD_CODE"
fi

echo ""
echo "--- safe-oi ---"
if [ -f "$PROJECT_ROOT/scripts/safe-oi" ]; then
    pass "scripts/safe-oi exists"
else
    fail "scripts/safe-oi missing"
fi

if [ -f "$PROJECT_ROOT/scripts/safe_oi_runner.py" ]; then
    pass "scripts/safe_oi_runner.py exists"
else
    fail "scripts/safe_oi_runner.py missing"
fi

echo ""
echo "--- Python syntax ---"
for mod in cyberbrain_memory.py memory_core.py scripts/safe_oi_runner.py; do
    if [ -f "$PROJECT_ROOT/$mod" ]; then
        if python3 -m py_compile "$PROJECT_ROOT/$mod" 2>/dev/null; then
            pass "$mod syntax OK"
        else
            fail "$mod syntax ERROR"
        fi
    else
        fail "$mod NOT FOUND"
    fi
done

echo ""
echo "--- Environment ---"
if [ -f "$PROJECT_ROOT/.env" ]; then
    pass ".env exists"
else
    fail ".env missing"
fi

if [ -f "$PROJECT_ROOT/.env.example" ]; then
    pass ".env.example exists"
else
    fail ".env.example missing"
fi

echo ""
echo "--- Secret validation ---"
if [ -x "$PROJECT_ROOT/scripts/check_secrets.sh" ]; then
    if "$PROJECT_ROOT/scripts/check_secrets.sh" >/dev/null 2>&1; then
        pass "check_secrets.sh validation passed"
    else
        fail "check_secrets.sh validation failed"
    fi
else
    fail "check_secrets.sh not found or not executable"
fi

echo ""
echo "=== Summary ==="
echo "Total: $TOTAL"
echo "Passed: $((TOTAL - FAILED))"
echo "Failed: $FAILED"

if [ "$FAILED" -gt 0 ]; then
    echo "Some tests failed."
    exit 1
else
    echo "All smoke tests passed."
    exit 0
fi
