#!/bin/bash
# Dev account #0
#PRIVATE_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
# Dev account #4
PRIVATE_KEY=0x47e179ec197488593b187f80a00eb0da91f1b9d0b13f8733639f19c30a34926a

set -euo pipefail

# Function to cleanup processes
cleanup() {
    if [[ -n "${ANVIL_PID:-}" ]] && kill -0 "$ANVIL_PID" 2>/dev/null; then
        kill "$ANVIL_PID" 2>/dev/null || true
        sleep 0.2
        kill -9 "$ANVIL_PID" 2>/dev/null || true
    fi
}

# Ensure cleanup on any exit
trap cleanup EXIT
# On Ctrl-C or TERM: exit immediately (will trigger EXIT trap -> cleanup)
trap 'exit 130' INT
trap 'exit 143' TERM

# Create log directory if it doesn't exist
mkdir -p log

# Run anvil in background and redirect output to log file
# shellcheck disable=SC2086
anvil --disable-block-gas-limit | tee log/anvil.txt &
ANVIL_PID=$!

# Function to check if string exists in file
check_string() {
    grep -q "$1" "$2"
    return $?
}

# Wait for anvil to start (max 30 seconds)
echo "Waiting for anvil to start..."
counter=0
while ! check_string "Listening on" "log/anvil.txt"; do
    sleep 1
    counter=$((counter + 1))
    if [ $counter -ge 5 ]; then
        echo "Timeout waiting for anvil to start"
        exit 1
    fi
done

forge script  --private-key ${PRIVATE_KEY} DeployMock --fork-url http://localhost:8545 --broadcast "$@" || exit 1

if [ "${1:-}" = "slow" ]; then
    echo "SLOW MODE: Setting mining mode to 12-second intervals."
    cast rpc evm_setIntervalMining 12
fi

echo "Press Ctrl+C to exit..."
# Wait for the anvil process; Ctrl-C will interrupt 'wait' and trigger cleanup via traps
wait "$ANVIL_PID"
