#!/usr/bin/env bash
#
# Start the bootstrap leader node
#

here=$(dirname "$0")
# shellcheck source=multinode-demo/common.sh
source "$here"/common.sh

# shellcheck source=scripts/oom-score-adj.sh
source "$here"/../scripts/oom-score-adj.sh

if [[ -d "$SNAP" ]]; then
  # Exit if mode is not yet configured
  # (typically the case after the Snap is first installed)
  [[ -n "$(snapctl get mode)" ]] || exit 0
fi

[[ -f "$SOLANA_CONFIG_DIR"/bootstrap-leader.json ]] || {
  echo "$SOLANA_CONFIG_DIR/bootstrap-leader.json not found, create it by running:"
  echo
  echo "  ${here}/setup.sh"
  exit 1
}

if [[ -n "$SOLANA_CUDA" ]]; then
  program="$solana_fullnode_cuda"
else
  program="$solana_fullnode"
fi

maybe_entry_stream=
maybe_init_complete_file=
maybe_no_leader_rotation=

while [[ -n $1 ]]; do
  if [[ $1 = --init-complete-file ]]; then
    maybe_init_complete_file="--init-complete-file $2"
    shift 2
  elif [[ $1 = --entry-stream ]]; then
    maybe_entry_stream="$1 $2"
    shift 2
  elif [[ $1 = --no-leader-rotation ]]; then
    maybe_no_leader_rotation="--no-leader-rotation"
    shift
  else
    echo "Unknown argument: $1"
    exit 1
  fi
done


if [[ -d $SNAP ]]; then
  if [[ $(snapctl get leader-rotation) = false ]]; then
    maybe_no_leader_rotation="--no-leader-rotation"
  fi
fi

tune_system

trap 'kill "$pid" && wait "$pid"' INT TERM
$solana_ledger_tool --ledger "$SOLANA_CONFIG_DIR"/bootstrap-leader-ledger verify

# shellcheck disable=SC2086 # Don't want to double quote maybe_entry_stream or maybe_init_complete_file
$program \
  $maybe_entry_stream \
  $maybe_init_complete_file \
  $maybe_no_leader_rotation \
  --identity "$SOLANA_CONFIG_DIR"/bootstrap-leader.json \
  --ledger "$SOLANA_CONFIG_DIR"/bootstrap-leader-ledger \
  --rpc-port 8899 \
  > >($bootstrap_leader_logger) 2>&1 &
pid=$!
oom_score_adj "$pid" 1000
wait "$pid"
