#!/usr/bin/env bash
# Request UPnP IGD port forwarding for listed services
set -e

# Load environment file if present
ENV_FILE="${ENV_FILE:-$(dirname "$0")/../environment/env.example}"
if [ -f "$ENV_FILE" ]; then
  # shellcheck disable=SC1090
  source "$ENV_FILE"
fi

PORTS=$(echo "$PUBLIC_PORTS" | tr ',' ' ')
LAN_INTERFACE=${LAN_INTERFACE:-vbr1s0}
UPNPC=${UPNPC:-upnpc}

if ! command -v "$UPNPC" >/dev/null 2>&1; then
  echo "Error: $UPNPC command not found" >&2
  exit 1
fi

HOST_IP=$(ip -4 addr show "$LAN_INTERFACE" | awk '/inet / {print $2}' | cut -d/ -f1)
if [ -z "$HOST_IP" ]; then
  echo "Unable to determine IPv4 address for $LAN_INTERFACE" >&2
  exit 1
fi

for port in $PORTS; do
  echo "Forwarding TCP port $port on $HOST_IP"
  "$UPNPC" -e "uniphi-$port" -a "$HOST_IP" "$port" "$port" TCP || true
  echo "Forwarding UDP port $port on $HOST_IP"
  "$UPNPC" -e "uniphi-$port" -a "$HOST_IP" "$port" "$port" UDP || true
done

echo "UPnP port forwarding completed"
