#!/bin/bash

# Script that exactly mimics test_individual.sh but captures first failure
# Usage: ./debug_benchmark_exact.sh [runs]

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

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

echo "Running '$TEST_CMD' $RUNS times..."
echo "Started at: $(date)"
echo

for i in $(seq 1 $RUNS); do
    echo -n "Run $i/$RUNS: "
    
    if [ "$FIRST_FAILURE_CAPTURED" = false ]; then
        # For the first potential failure, capture output
        STDOUT_FILE=$(mktemp)
        STDERR_FILE=$(mktemp)
        timeout 30s $TEST_CMD > "$STDOUT_FILE" 2> "$STDERR_FILE"
        EXIT_CODE=$?
    else
        # After capturing first failure, run exactly like original script
        timeout 30s $TEST_CMD --quiet > /dev/null 2>&1
        EXIT_CODE=$?
    fi
    
    if [ $EXIT_CODE -eq 0 ]; then
        SUCCESS_COUNT=$((SUCCESS_COUNT + 1))
        echo "PASS"
        if [ "$FIRST_FAILURE_CAPTURED" = false ] && [ -f "$STDOUT_FILE" ]; then
            rm -f "$STDOUT_FILE" "$STDERR_FILE"
        fi
    elif [ $EXIT_CODE -eq 124 ]; then
        TIMEOUT_COUNT=$((TIMEOUT_COUNT + 1))
        echo "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
            rm -f "$STDOUT_FILE" "$STDERR_FILE"
        fi
    else
        FAILURE_COUNT=$((FAILURE_COUNT + 1))
        echo "FAIL (exit code: $EXIT_CODE)"
        
        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
            rm -f "$STDOUT_FILE" "$STDERR_FILE"
        fi
    fi
done

echo
echo "=== RESULTS FOR benchmark ==="
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)"