#!/usr/bin/env bash
# Automatically create UPnP port forwarding rules for services
# Requires miniupnpc (upnpc command)
set -euo pipefail

CONF_FILE="${1:-$(dirname "$0")/../environment/upnp-services.conf}"
LAN_IP="${LAN_IP:-$(hostname -I | awk '{print $1}') }"

if ! command -v upnpc >/dev/null 2>&1; then
  echo "upnpc command not found. Install miniupnpc." >&2
  exit 1
fi

if [ ! -f "$CONF_FILE" ]; then
  echo "Config file $CONF_FILE not found" >&2
  exit 1
fi

while IFS= read -r line; do
  [[ "$line" =~ ^#.*$ || -z "$line" ]] && continue
  name="${line%%:*}"
  port_proto="${line#*:}"
  port="${port_proto%%/*}"
  proto="${port_proto##*/}"
  [ "$proto" = "$port" ] && proto="TCP"

  echo "Forwarding $name on $LAN_IP:$port/$proto"
  upnpc -e "$name" -a "$LAN_IP" "$port" "$port" "$proto" || {
    echo "Failed to forward $name" >&2
  }
done < "$CONF_FILE"

