#!/usr/bin/env bash
# Prepare eth_game + gretap for edge bridge — does NOT touch eth_lan (WireGuard uplink).
#
#   sudo bash prep_eth_game_for_fixture.sh

set -euo pipefail

if [[ "${EUID}" -ne 0 ]]; then
  echo "Run with sudo: sudo $0" >&2
  exit 1
fi

# shellcheck disable=SC1091
source "$(dirname "$0")/pog_edge_env.sh"

GAME="${POG_EDGE_GAME_IF:-}"
GRETAP="${GRETAP_IF:-gretap0}"
LAN="${POG_EDGE_LAN_IF:-eth0}"

if pgrep -f 'pog422_fixture_bridge|broadcast_br_script' >/dev/null 2>&1; then
  echo "FATAL: stop bridge Python first" >&2
  exit 1
fi

if ip link show br0 >/dev/null 2>&1; then
  ip link set br0 down 2>/dev/null || true
fi

ports=()
if [[ -n "${GAME}" ]] && [[ -d "/sys/class/net/${GAME}" ]]; then
  ports+=("${GAME}")
fi
ports+=("${GRETAP}")

for p in "${ports[@]}"; do
  if [[ ! -d "/sys/class/net/${p}" ]]; then
    if [[ "${p}" == "${GRETAP}" ]]; then
      echo "WARN: ${GRETAP} not up — run tunnel_up.sh first" >&2
      continue
    fi
    echo "WARN: ${p} not found — skip" >&2
    continue
  fi
  ip addr flush dev "${p}" 2>/dev/null || true
  ip link set "${p}" nomaster 2>/dev/null || true
  ip link set "${p}" up
done

if [[ -d "/sys/class/net/${LAN}" ]]; then
  ip link set "${LAN}" up 2>/dev/null || true
fi

PY3="$(readlink -f "$(command -v python3)")"
if getcap "${PY3}" 2>/dev/null | grep -q 'cap_net_raw'; then
  echo "cap_net_raw already on ${PY3}"
else
  if command -v setcap >/dev/null 2>&1; then
    echo "Granting cap_net_raw to ${PY3}..."
    setcap cap_net_raw+ep "${PY3}"
    getcap "${PY3}" || true
  else
    echo "WARN: setcap missing — install libcap2-bin" >&2
  fi
fi

echo "Edge bridge ports ready:"
for dev in "${ports[@]}"; do
  ip -br link show "${dev}" 2>/dev/null || true
done
