#!/bin/bash
set -euo pipefail

ACTION="${1:-}"
IFACE="${2:-}"
PORT=5201

if [[ "$ACTION" != "open" && "$ACTION" != "close" ]]; then
    echo "Usage: $0 {open|close} INTERFACE" >&2
    exit 2
fi
if [[ ! "$IFACE" =~ ^[A-Za-z0-9_.:-]+$ ]] || [[ ! -d "/sys/class/net/$IFACE" ]] || [[ "$IFACE" == "lo" ]]; then
    echo "Invalid network interface" >&2
    exit 2
fi
if ! ufw status | head -1 | grep -q "Status: active"; then
    echo "UFW is inactive. Enable it separately before using this app." >&2
    exit 3
fi

TAG="LEMOA_IPERF3_SESSION_${IFACE}"

remove_tagged_rules() {
    local number
    mapfile -t RULES < <(
        ufw status numbered |
            awk -v tag="$TAG" 'index($0, tag) && match($0, /\[[[:space:]]*[0-9]+\]/) {number=substr($0, RSTART, RLENGTH); gsub(/[^0-9]/, "", number); print number}' |
            sort -rn
    )
    for number in "${RULES[@]}"; do
        if [[ -n "$number" ]]; then
            ufw --force delete "$number" >/dev/null
        fi
    done
    return 0
}

remove_tagged_rules
if [[ "$ACTION" == "open" ]]; then
    ufw allow in on "$IFACE" to any port "$PORT" proto tcp comment "$TAG" >/dev/null
    echo "Opened TCP $PORT on $IFACE"
else
    echo "Closed TCP $PORT on $IFACE"
fi
