#!/usr/bin/env bash
# DHCP on eth_lan only — leaves eth_game IP-less for AF_PACKET bridge.
# Run with sudo before tunnel_up / edge bridge.
#
#   POG_EDGE_ROLE=office sudo -E bash prep_eth_lan_dhcp.sh

set -euo pipefail

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

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

if [[ -z "${POG_EDGE_ROLE:-}" ]]; then
  echo "FATAL: set POG_EDGE_ROLE=office|pos4" >&2
  exit 1
fi

LAN="${POG_EDGE_LAN_IF}"
GAME="${POG_EDGE_GAME_IF}"

if pgrep -f 'pog422_fixture_bridge' >/dev/null 2>&1; then
  echo "FATAL: stop fixture bridge before prep_eth_lan_dhcp" >&2
  exit 1
fi

if [[ ! -d "/sys/class/net/${LAN}" ]]; then
  echo "FATAL: ${LAN} not found" >&2
  exit 1
fi

ip link set "${LAN}" nomaster 2>/dev/null || true
ip link set "${LAN}" up

if command -v nmcli >/dev/null 2>&1; then
  nmcli dev set "${LAN}" managed yes 2>/dev/null || true
  nmcli dev connect "${LAN}" 2>/dev/null || true
fi

if ! ip -4 addr show dev "${LAN}" | grep -q 'inet '; then
  if command -v dhclient >/dev/null 2>&1; then
    dhclient -v "${LAN}" || dhclient "${LAN}"
  else
    echo "WARN: no IPv4 on ${LAN} and dhclient missing" >&2
  fi
fi

if [[ -n "${GAME}" ]] && [[ -d "/sys/class/net/${GAME}" ]]; then
  ip addr flush dev "${GAME}" 2>/dev/null || true
  ip link set "${GAME}" nomaster 2>/dev/null || true
  ip link set "${GAME}" up
fi

echo "eth_lan ${LAN}:"
ip -br addr show "${LAN}" || true
if [[ -n "${GAME}" ]]; then
  echo "eth_game ${GAME} (no IP — AF_PACKET only):"
  ip -br addr show "${GAME}" 2>/dev/null || echo "  (missing)"
else
  echo "eth_game: (none — tunnel-only peer via ${GRETAP_IF:-gretap0})"
fi

if [[ -n "${POG_EDGE_LAN_IP:-}" ]]; then
  if ip -4 addr show dev "${LAN}" | grep -q "${POG_EDGE_LAN_IP}"; then
    echo "OK: expected bench LAN ${POG_EDGE_LAN_IP} on ${LAN}"
  else
    echo "WARN: expected ${POG_EDGE_LAN_IP} on ${LAN} — check cabling/DHCP" >&2
  fi
fi
