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

SNAPSHOT_BASE_URL="${SNAPSHOT_BASE_URL:-https://snapshots-t.noders.services/monad/}"
SNAPSHOT_META_URL="${SNAPSHOT_META_URL:-$SNAPSHOT_BASE_URL/latest_snapshot.json}"
MF_BUCKET="https://bucket.monadinfra.com"
VALIDATORS_FILE="/home/monad/monad-bft/config/validators/validators.toml"
SQ_THREAD_CPU="${SQ_THREAD_CPU:-15}"

command -v jq >/dev/null 2>&1 || {
  echo "ERROR: jq is required"
  exit 1
}

echo "Fetching latest snapshot metadata..."
META_JSON="$(curl -fsSL "$SNAPSHOT_META_URL")"
BLOCK_VERSION="$(printf '%s' "$META_JSON" | jq -r '.height')"
ARCHIVE_NAME="$(printf '%s' "$META_JSON" | jq -r '.archive_name // empty')"

if [ -z "$BLOCK_VERSION" ] || [ "$BLOCK_VERSION" = "null" ]; then
  echo "ERROR: Could not read height from $SNAPSHOT_META_URL"
  exit 1
fi

echo "Using snapshot block height: $BLOCK_VERSION"
[ -n "$ARCHIVE_NAME" ] && echo "Snapshot archive: $ARCHIVE_NAME"

echo "Locating actual snapshot directory..."
ACTUAL_BLOCK_DIR=$(find /home/monad/monad-bft/snapshots -type d -name "$BLOCK_VERSION" | head -n 1)

if [ -z "$ACTUAL_BLOCK_DIR" ]; then
  echo "ERROR: Could not find folder named $BLOCK_VERSION inside /home/monad/monad-bft/snapshots"
  exit 1
fi

SNAPSHOT_DIR=$(dirname "$ACTUAL_BLOCK_DIR")

echo "Found snapshot data at: $ACTUAL_BLOCK_DIR"
echo "Passing parent directory to monad-cli: $SNAPSHOT_DIR"
# ==========================================

echo "Stopping services just in case..."
systemctl stop monad-bft monad-execution monad-rpc

echo "Formatting TrieDB (DUAL mode)..."
/usr/local/bin/monad-mpt --storage /dev/triedb --truncate --yes
/usr/local/bin/monad-mpt --storage /dev/triedb --create
/usr/local/bin/monad-mpt --storage /dev/triedb --activate-secondary --state-machine monad

echo "IMPORT 1: Primary timeline (slot)..."
/usr/local/bin/monad-cli \
  --db /dev/triedb \
  --load_binary_snapshot "$SNAPSHOT_DIR" \
  --version "$BLOCK_VERSION" \
  --sq_thread_cpu "$SQ_THREAD_CPU"

echo "IMPORT 2: Secondary timeline (page)..."
/usr/local/bin/monad-cli \
  --db /dev/triedb \
  --load_binary_snapshot "$SNAPSHOT_DIR" \
  --version "$BLOCK_VERSION" \
  --sq_thread_cpu "$SQ_THREAD_CPU" \
  --secondary

echo "Updating configs (forkpoint & validators)..."
curl -sSL "$MF_BUCKET/scripts/testnet/download-forkpoint.sh" | bash
curl -sSL "$MF_BUCKET/validators/testnet/validators.toml" -o "$VALIDATORS_FILE"

echo "Setting permissions..."
chown -R monad:monad /home/monad/

echo "Cleaning up extracted files..."
rm -rf /home/monad/monad-bft/snapshots/*

echo "Starting services..."
systemctl start monad-bft monad-execution monad-rpc

echo "✅ Done! Check logs: journalctl -u monad-bft -f"
