#!/usr/bin/env bash

set -uo pipefail

if [ -z "${CARDANO_NODE_SOCKET_PATH:-}" ]; then
  echo "CARDANO_NODE_SOCKET_PATH is not set" >&2
  exit 1
fi

SOCKET_PATH="$(readlink -m "$CARDANO_NODE_SOCKET_PATH")"
STATE_CLUSTER="${SOCKET_PATH%/*}"
PID_FILE="${STATE_CLUSTER}/supervisord.pid"
SUPERVISORD_SOCKET_PATH="${STATE_CLUSTER}/supervisord.sock"

INSTANCE_NUM="%%INSTANCE_NUM%%"
if [[ "$SOCKET_PATH" != *"/state-cluster${INSTANCE_NUM}/"* ]]; then
  echo "CARDANO_NODE_SOCKET_PATH must be set to a path containing 'state-cluster${INSTANCE_NUM}', line $LINENO" >&2
  exit 1
fi

if [ -e "$SUPERVISORD_SOCKET_PATH" ]; then
  supervisorctl -s "unix:///${SUPERVISORD_SOCKET_PATH}" stop all || rm -f "$SUPERVISORD_SOCKET_PATH"
fi

if [ ! -f "$PID_FILE" ]; then
  echo "Cluster is not running!"
  exit 0
fi

PID="$(<"$PID_FILE")"
for _ in {1..5}; do
  if ! kill "$PID"; then
    break
  fi
  sleep 1
  if [ ! -f "$PID_FILE" ]; then
    break
  fi
done

rm -f "$PID_FILE"
echo "Cluster terminated!"
