#!/usr/bin/env bash
set -euo pipefail

ROOT="${ACE_WORKSPACE_ROOT:-$PWD}"
STAMP="$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
OUT="$ROOT/agent-state/EVAL_REPORT.md"

mkdir -p "$ROOT/agent-state"

pass_count=0
fail_count=0

run_check() {
  local name="$1"
  shift
  if "$@" >/tmp/ace_eval_last.out 2>/tmp/ace_eval_last.err; then
    echo "- PASS: $name" >>"$OUT"
    pass_count=$((pass_count + 1))
  else
    echo "- FAIL: $name" >>"$OUT"
    echo "  - stderr: $(tr '\n' ' ' </tmp/ace_eval_last.err | sed 's/  */ /g')" >>"$OUT"
    fail_count=$((fail_count + 1))
  fi
}

{
  echo "# EVAL_REPORT"
  echo
  echo "Generated: $STAMP"
  echo
  echo "## Checks"
} >"$OUT"

# Resolve ace-swarm runtime: prefer local monorepo, fall back to npx-installed package
if [ -f "$ROOT/ace-mcp-server/dist/cli.js" ]; then
  ACE_CLI="node $ROOT/ace-mcp-server/dist/cli.js"
  ACE_IMPORT_PREFIX="./ace-mcp-server/dist"
elif command -v ace >/dev/null 2>&1; then
  ACE_CLI="ace"
  ACE_PKG_DIR="$(node -e "console.log(require.resolve('ace-swarm/package.json').replace('/package.json',''))")"
  ACE_IMPORT_PREFIX="$ACE_PKG_DIR/dist"
else
  ACE_CLI="npx --yes ace-swarm"
  ACE_PKG_DIR="$(npx --yes ace-swarm paths 2>/dev/null | grep PACKAGE_ROOT | cut -d= -f2)"
  ACE_IMPORT_PREFIX="$ACE_PKG_DIR/dist"
fi

run_check "cli_paths" $ACE_CLI paths
run_check "schema_validation_smoke" node --input-type=module -e "import('${ACE_IMPORT_PREFIX}/schemas.js').then((m)=>{ const ok=m.validateStatusEventPayload({schema_version:'1.0.0',event_id:'evt-12345',trace_id:'trace-12345',timestamp:new Date().toISOString(),source_module:'capability-ops',event_type:'SMOKE',status:'pass',payload:{summary:'smoke'}}); if(!ok.ok) throw new Error(ok.errors.join('; ')); })"
run_check "index_delta_smoke" node --input-type=module -e "import('${ACE_IMPORT_PREFIX}/index-store.js').then((m)=>{ const r=m.scanWorkspaceDelta({path:'.',depth:2,max_files:500,file_entry_cap:0}); if(typeof r.snapshot.file_count !== 'number') throw new Error('invalid file_count'); if(!r.fingerprint_path) throw new Error('missing fingerprint path'); })"

{
  echo
  echo "## Summary"
  echo "- Passed: $pass_count"
  echo "- Failed: $fail_count"
  echo
  if [ "$fail_count" -eq 0 ]; then
    echo "Verdict: PASS"
  else
    echo "Verdict: FAIL"
  fi
} >>"$OUT"

if [ "$fail_count" -eq 0 ]; then
  exit 0
fi
exit 1
