#!/usr/bin/env bash
# EDGE wlan-star hop: keep WG/gretap, restart bridge with lab gameplay synth.
# Env (required): CHAIN_OCTET  LAB_GAMEPLAY_TID
# Optional: LAB_GAMEPLAY_GAMES  LAB_GAMEPLAY_SESSION_S  LAB_GAMEPLAY_PERIOD_S  LAB_GAMEPLAY_PHASE_S
set -euo pipefail
OCTET="${CHAIN_OCTET:?set CHAIN_OCTET}"
TID="${LAB_GAMEPLAY_TID:?set LAB_GAMEPLAY_TID}"
GAMES="${LAB_GAMEPLAY_GAMES:-touch6}"
SESSION_S="${LAB_GAMEPLAY_SESSION_S:-180}"
PERIOD_S="${LAB_GAMEPLAY_PERIOD_S:-10}"
PHASE_S="${LAB_GAMEPLAY_PHASE_S:-}"
# Keep first-wager delay short so smoke (~30s) still sees a round on EDGE.
if [[ -z "$PHASE_S" ]]; then
  PHASE_S="$(python3 -c "print(round(($OCTET % 7) * 0.3, 2))")"
fi

DEV=~/EtherGold/dev
EDGE_ROOT="${DEV}/pog-edge"
LOG_DIR=~/EtherGold/logs/lab_gameplay_pilot
mkdir -p "$LOG_DIR" "${DEV}/lab_gameplay_templates"

echo "=== edge-star synth stop host=$(hostname) octet=$OCTET ==="
# Bracket tricks avoid pkill matching this script / the pkill argv itself.
sudo pkill -f '/EtherGold/.*/run_ethergold[.]sh' 2>/dev/null || true
sudo pkill -f 'run_bridge_edge' 2>/dev/null || true
sudo pkill -f 'run_bridge_jun11' 2>/dev/null || true
sudo pkill -f '[p]og422_bridge[.]py' 2>/dev/null || true
sudo pkill -f '[p]og422_fixture_bridge' 2>/dev/null || true
sudo pkill -f '[p]og422_uartd' 2>/dev/null || true
sleep 2
sudo pkill -9 -f '[p]og422_bridge[.]py' 2>/dev/null || true
sudo pkill -9 -f '[p]og422_fixture_bridge' 2>/dev/null || true
sudo pkill -9 -f '[p]og422_uartd' 2>/dev/null || true
sleep 1

if [[ -f /etc/ethergold/edge.env ]]; then
  set -a
  # shellcheck disable=SC1091
  source /etc/ethergold/edge.env
  set +a
fi
if [[ "${EDGE_MODE:-0}" != "1" ]]; then
  echo "FATAL: EDGE_MODE!=1 on this hop" >&2
  exit 1
fi

# Seat SM uses FIXTURE_POS=1; spoke id stays EDGE_SPOKE_ID for gretap eg-sNN.
export FIXTURE_POS=1
export PI_LABEL="topbox${OCTET}"
export EDGE_SPOKE_ID="${EDGE_SPOKE_ID:-$OCTET}"

echo "=== tunnel_up (spoke_id=${EDGE_SPOKE_ID}) ==="
cd "$EDGE_ROOT"
sudo -E bash ./tunnel_up.sh
GRETAP="$(tr -d '\r\n' < "${EDGE_ROOT}/.active_gretap" 2>/dev/null || true)"
if [[ -z "$GRETAP" ]]; then
  GRETAP="$(printf 'eg-s%02d' "${EDGE_SPOKE_ID}")"
fi
if ! ip link show "$GRETAP" >/dev/null 2>&1; then
  echo "FATAL: gretap $GRETAP missing after tunnel_up" >&2
  ip -br link | grep -E 'wg0|eg-' || true
  exit 1
fi
echo "gretap=$GRETAP"

ENVF=~/EtherGold/fixture-bridge.env
touch "$ENVF"
for key in LAB_GAMEPLAY_SYNTH LAB_GAMEPLAY_TID LAB_GAMEPLAY_GAMES LAB_GAMEPLAY_TOUCH6_REPLICATE \
           LAB_GAMEPLAY_SESSION_S LAB_GAMEPLAY_PHASE_S LAB_GAMEPLAY_PERIOD_S \
           LAB_GAMEPLAY_JITTER_S FIXTURE_POS PI_LABEL; do
  sed -i "/^${key}=/d" "$ENVF" 2>/dev/null || true
done
{
  echo "FIXTURE_POS=1"
  echo "PI_LABEL=topbox${OCTET}"
  echo "LAB_GAMEPLAY_SYNTH=1"
  echo "LAB_GAMEPLAY_TID=${TID}"
  echo "LAB_GAMEPLAY_GAMES=${GAMES}"
  echo "LAB_GAMEPLAY_TOUCH6_REPLICATE=1"
  echo "LAB_GAMEPLAY_SESSION_S=${SESSION_S}"
  echo "LAB_GAMEPLAY_PERIOD_S=${PERIOD_S}"
  echo "LAB_GAMEPLAY_JITTER_S=0.5"
  echo "LAB_GAMEPLAY_PHASE_S=${PHASE_S}"
} >>"$ENVF"

LOG="${LOG_DIR}/bridge.log"
: >"$LOG"
REAL_USER="${SUDO_USER:-topbox}"
nohup sudo -u "${REAL_USER}" env \
  ETHERGOLD_ENTRY=1 \
  FIXTURE_POS=1 \
  PI_LABEL="topbox${OCTET}" \
  CHANNEL=machine \
  CLEAR_CAPTURE=1 \
  FIXTURE_MODE=debug \
  FIXTURE_PROD=0 \
  FIXTURE_DEV_LIGHT=1 \
  ETH_PORTS="${GRETAP}" \
  LINK_WATCH_INTERFACE="${GRETAP}" \
  EDGE_MODE=1 \
  EDGE_TOPOLOGY="${EDGE_TOPOLOGY:-spoke}" \
  EDGE_SPOKE_ID="${EDGE_SPOKE_ID}" \
  EDGE_UPLINK="${EDGE_UPLINK:-wlan0}" \
  POG_EDGE_BENCH=1 \
  POG422_UARTD=1 \
  POG422_UARTD_INJECT=1 \
  LAB_GAMEPLAY_SYNTH=1 \
  LAB_GAMEPLAY_TID="${TID}" \
  LAB_GAMEPLAY_GAMES="${GAMES}" \
  LAB_GAMEPLAY_TOUCH6_REPLICATE=1 \
  LAB_GAMEPLAY_SESSION_S="${SESSION_S}" \
  LAB_GAMEPLAY_PERIOD_S="${PERIOD_S}" \
  LAB_GAMEPLAY_JITTER_S=0.5 \
  LAB_GAMEPLAY_PHASE_S="${PHASE_S}" \
  LAB_GAMEPLAY_SYNTH_ALLOW_PROD=0 \
  FIXTURE_EARLY_WIN_PHASE1=0 \
  FIXTURE_EARLY_WIN_PHASE2_SLOTS=0 \
  FIXTURE_EARLY_WIN_PHASE2_KENO=0 \
  bash "${DEV}/run_bridge_jun11_good.sh" \
  >"$LOG" 2>&1 &
echo $! >"${LOG_DIR}/bridge.pid"
sleep 8
echo "octet=$OCTET tid=$TID games=$GAMES period_s=$PERIOD_S phase_s=$PHASE_S gretap=$GRETAP pid=$(cat "${LOG_DIR}/bridge.pid")"
grep -E "LAB gameplay|lab_gameplay_synth_armed|lab_gameplay_session_start|WARNING: LAB|FATAL|TypeError|eth_ports|ETH_PORTS" "$LOG" | head -25 || true
pgrep -af 'pog422_bridge|pog422_fixture_bridge' | head -3 || true
ip -br link | grep -E 'wg0|eg-' || true
sudo wg show 2>/dev/null | head -12 || true
