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

SCRIPT_VERSION="run_bio_usdc_fresh_event_update_v1_2026_05_05"
echo "[script_version] $0 SCRIPT_VERSION=${SCRIPT_VERSION}"

# One-shot BIO/USDC Aerodrome event refresh for paper-live freshness.
#
# Safe defaults:
# - DRY_RUN=1 by default, so scheduled agents do not accidentally start network collection.
# - Conservative chunk/sleep settings are used for any real run.
# - No secrets are embedded or printed.
# - Output goes to local DEX_DATA, not ../DEX_full_cycle.
#
# To run as an event-driven background job:
#   scripts/run_tmux_supervised.sh bio_usdc_fresh_update \
#     'DRY_RUN=0 BASE_RPC_URL=<set in shell, not here> bash scripts/run_bio_usdc_fresh_event_update_v1.sh'

POOL="${POOL:-0xd40bffa9c9e35493b88a2b6744c49d8716b00898}"
POOL_NAME="${POOL_NAME:-bio_usdc_fresh_paper_live}"
FEE_RATE="${FEE_RATE:-0.003}"

TIME_FROM="${TIME_FROM:-2026-05-03T22:11:41Z}"
TIME_TO="${TIME_TO:-$(date -u +%Y-%m-%dT%H:%M:%SZ)}"

OUT_DIR="${OUT_DIR:-DEX_DATA/aerodrome_slipstream/${POOL_NAME}_${TIME_FROM//[:]/-}_${TIME_TO//[:]/-}}"
OUT_NPZ="${OUT_NPZ:-DEX_DATA/fast_npz/${POOL_NAME}_fee_replay_v2.npz}"

COLLECTOR="${COLLECTOR:-dex_platform/data_collectors/full_cycle_import/fetch_aerodrome_slipstream_events_v2.py}"
BUILDER="${BUILDER:-dex_platform/data_collectors/full_cycle_import/build_cl_fee_replay_npz_v2.py}"

RPC_URL="${BASE_RPC_URL:-https://mainnet.base.org}"
EVENTS="${EVENTS:-Swap,Mint,Burn,Collect}"
CHUNK_SIZE="${CHUNK_SIZE:-1000}"
MIN_CHUNK_SIZE="${MIN_CHUNK_SIZE:-100}"
SLEEP_S="${SLEEP_S:-0.5}"
ATTEMPTS="${ATTEMPTS:-8}"
DRY_RUN="${DRY_RUN:-1}"

mkdir -p "$(dirname "${OUT_NPZ}")" "${OUT_DIR}" DEX_REPORTS/live_readiness

echo "[target] pool=${POOL} pool_name=${POOL_NAME}"
echo "[window] ${TIME_FROM} -> ${TIME_TO}"
echo "[out_dir] ${OUT_DIR}"
echo "[out_npz] ${OUT_NPZ}"
echo "[settings] events=${EVENTS} chunk=${CHUNK_SIZE} min_chunk=${MIN_CHUNK_SIZE} sleep=${SLEEP_S} attempts=${ATTEMPTS} dry_run=${DRY_RUN}"

collect_cmd=(
  python3 "${COLLECTOR}"
  --pool "${POOL}"
  --time-from "${TIME_FROM}"
  --time-to "${TIME_TO}"
  --out-dir "${OUT_DIR}"
  --rpc-url "${RPC_URL}"
  --chunk-size "${CHUNK_SIZE}"
  --min-chunk-size "${MIN_CHUNK_SIZE}"
  --sleep-s "${SLEEP_S}"
  --attempts "${ATTEMPTS}"
  --events "${EVENTS}"
  --no-parquet
)

build_cmd=(
  python3 "${BUILDER}"
  --events "${OUT_DIR}/events_all.csv"
  --out-npz "${OUT_NPZ}"
  --pool-name "${POOL_NAME}"
  --token0 BIO
  --token1 USDC
  --dec0 18
  --dec1 6
  --quote-token token1
  --fee-rate "${FEE_RATE}"
)

printf '[collect_cmd]'
printf ' %q' "${collect_cmd[@]}"
printf '\n'
printf '[build_cmd]'
printf ' %q' "${build_cmd[@]}"
printf '\n'

if [[ "${DRY_RUN}" == "1" ]]; then
  cat > DEX_REPORTS/live_readiness/bio_usdc_fresh_update_dry_run_latest.md <<EOF
# BIO/USDC Fresh Event Update Dry Run

script_version: ${SCRIPT_VERSION}
time_from: ${TIME_FROM}
time_to: ${TIME_TO}
out_dir: ${OUT_DIR}
out_npz: ${OUT_NPZ}
dry_run: true

Run through supervised tmux only when intentionally collecting:

\`\`\`bash
scripts/run_tmux_supervised.sh bio_usdc_fresh_update 'DRY_RUN=0 bash scripts/run_bio_usdc_fresh_event_update_v1.sh'
\`\`\`

Use a configured shell environment for RPC settings; do not paste secrets into docs.
EOF
  echo "[dry_run] wrote DEX_REPORTS/live_readiness/bio_usdc_fresh_update_dry_run_latest.md"
  exit 0
fi

if [[ -s "${OUT_DIR}/events_all.csv" ]]; then
  echo "[skip] events already exist: ${OUT_DIR}/events_all.csv"
else
  "${collect_cmd[@]}"
fi

if [[ -s "${OUT_NPZ}" ]]; then
  echo "[skip] npz already exists: ${OUT_NPZ}"
else
  "${build_cmd[@]}"
fi

python3 scripts/check_paper_live_freshness_v1.py \
  --npz "${OUT_NPZ}" \
  --out-md DEX_REPORTS/live_readiness/bio_usdc_fresh_update_freshness_latest.md \
  --max-stale-hours "${MAX_STALE_HOURS:-6}"
