#!/bin/bash

# Script to run benchmark tests and capture the first failure
# Usage: ./debug_benchmark.sh [runs]

RUNS=${1:-20}
TEST_CMD="cargo test --test submit_to_main_thread_benchmark --quiet"
TIMEOUT_SECONDS=30

SUCCESS_COUNT=0
FAILURE_COUNT=0
TIMEOUT_COUNT=0
FIRST_FAILURE_CAPTURED=false

echo "Running '$TEST_CMD' $RUNS times..."
echo "Timeout: ${TIMEOUT_SECONDS}s"
echo "Started at: $(date)"
echo

for i in $(seq 1 $RUNS); do
    echo -n "Run $i/$RUNS: "
    
    # Create temporary files for output (but only capture on failure)
    STDOUT_FILE=$(mktemp)
    STDERR_FILE=$(mktemp)
    
    # Run with timeout like the original script but capture output for failure analysis
    timeout ${TIMEOUT_SECONDS}s $TEST_CMD > "$STDOUT_FILE" 2> "$STDERR_FILE"
    EXIT_CODE=$?
    
    if [ $EXIT_CODE -eq 0 ]; then
        SUCCESS_COUNT=$((SUCCESS_COUNT + 1))
        echo "PASS"
    elif [ $EXIT_CODE -eq 124 ]; then
        TIMEOUT_COUNT=$((TIMEOUT_COUNT + 1))
        echo "TIMEOUT"
        
        # Capture first timeout
        if [ "$FIRST_FAILURE_CAPTURED" = false ]; then
            echo
            echo "=== FIRST TIMEOUT CAPTURED (Run $i) ==="
            echo "--- STDOUT ---"
            cat "$STDOUT_FILE"
            echo "--- STDERR ---"
            cat "$STDERR_FILE"
            echo "--- END TIMEOUT OUTPUT ---"
            echo
            FIRST_FAILURE_CAPTURED=true
        fi
    else
        FAILURE_COUNT=$((FAILURE_COUNT + 1))
        echo "FAIL (exit code: $EXIT_CODE)"
        
        # Capture first failure
        if [ "$FIRST_FAILURE_CAPTURED" = false ]; then
            echo
            echo "=== FIRST FAILURE CAPTURED (Run $i) ==="
            echo "Exit code: $EXIT_CODE"
            echo "--- STDOUT ---"
            cat "$STDOUT_FILE"
            echo "--- STDERR ---"
            cat "$STDERR_FILE"
            echo "--- END FAILURE OUTPUT ---"
            echo
            FIRST_FAILURE_CAPTURED=true
        fi
    fi
    
    # Clean up temp files
    rm -f "$STDOUT_FILE" "$STDERR_FILE"
done

echo
echo "=== FINAL RESULTS ==="
echo "Total runs: $RUNS"
echo "Successes: $SUCCESS_COUNT"
echo "Failures: $FAILURE_COUNT"
echo "Timeouts: $TIMEOUT_COUNT"
echo "Success rate: $(echo "scale=2; $SUCCESS_COUNT * 100 / $RUNS" | bc -l)%"
echo "Failure rate: $(echo "scale=2; $FAILURE_COUNT * 100 / $RUNS" | bc -l)%"
echo "Timeout rate: $(echo "scale=2; $TIMEOUT_COUNT * 100 / $RUNS" | bc -l)%"
echo "Finished at: $(date)"