#!/bin/bash
#########################################################
# netprio.sh – Standard-Netzwerkschnittstelle wählen
#
# Setzt die NM-Route-Metrik so, dass entweder ETH oder
# LTE die Default-Route übernimmt (niedrigere Metrik
# gewinnt). Die Einstellung ist persistent (NM-Profil).
#
# Metriken:
#   Default (bevorzugt): 100
#   Fallback:            700
#########################################################

BIN=/home/snowtv/bin
LOG=/var/log/stv.log
LTE_CON="lte-snowtv"
METRIC_HIGH=100
METRIC_LOW=700

_log() { echo "$(date '+%Y-%m-%d %H:%M:%S') netprio: $*" | tee -a "$LOG"; }

# Ethernet-Verbindung automatisch ermitteln
ETH_CON=$(nmcli -g NAME,TYPE connection show | grep -i 'ethernet' | cut -d: -f1 | head -1)

if [ -z "$ETH_CON" ]; then
    echo "Keine Ethernet-Verbindung in NetworkManager gefunden."
    exit 1
fi

# LTE-Verbindung prüfen
LTE_EXISTS=$(nmcli -g NAME connection show | grep -x "$LTE_CON")

# Aktuelle Metriken anzeigen
ETH_METRIC=$(nmcli -g ipv4.route-metric connection show "$ETH_CON" 2>/dev/null)
LTE_METRIC=$(nmcli -g ipv4.route-metric connection show "$LTE_CON" 2>/dev/null)

printf "\n--- Netzwerk-Priorität ---\n"
printf "ETH (%s):  Metrik %s\n" "$ETH_CON" "${ETH_METRIC:--}"
[ -n "$LTE_EXISTS" ] && printf "LTE (%s): Metrik %s\n" "$LTE_CON" "${LTE_METRIC:--}"
printf "\n"

printf "Welche Schnittstelle soll Default sein?\n"
if [ -n "$LTE_EXISTS" ]; then
    select PRIO in "ETH (Ethernet bevorzugt)" "LTE (LTE bevorzugt)"; do
        case $PRIO in
            "ETH"*) MODE=eth; break ;;
            "LTE"*) MODE=lte; break ;;
            *) echo "Ungültige Auswahl" ;;
        esac
    done
else
    echo "Kein LTE-Profil vorhanden – ETH ist Default."
    MODE=eth
fi

case $MODE in
    eth)
        sudo nmcli connection modify "$ETH_CON" ipv4.route-metric $METRIC_HIGH
        [ -n "$LTE_EXISTS" ] && sudo nmcli connection modify "$LTE_CON" ipv4.route-metric $METRIC_LOW
        _log "ETH als Default gesetzt (ETH=$METRIC_HIGH, LTE=$METRIC_LOW)"
        echo "ETH ist jetzt Default-Route."
        ;;
    lte)
        sudo nmcli connection modify "$ETH_CON" ipv4.route-metric $METRIC_LOW
        sudo nmcli connection modify "$LTE_CON" ipv4.route-metric $METRIC_HIGH
        _log "LTE als Default gesetzt (LTE=$METRIC_HIGH, ETH=$METRIC_LOW)"
        echo "LTE ist jetzt Default-Route."
        ;;
esac

# Metrik sofort anwenden
# - device reapply: SSH-sicher (kein Disconnect) – funktioniert nur wenn Device aktiv
# - Fallback connection up: nur wenn Device NICHT aktiv (kein SSH drauf → sicher)
_apply_con() {
    local CON="$1"
    local DEV
    DEV=$(nmcli -g GENERAL.DEVICE connection show --active "$CON" 2>/dev/null | head -1)
    if [ -n "$DEV" ]; then
        sudo nmcli device reapply "$DEV" 2>/dev/null \
            && _log "$CON: Metrik via device reapply gesetzt (DEV=$DEV)" \
            || _log "$CON: device reapply fehlgeschlagen – wirkt nach nächstem Reconnect"
    else
        # Device nicht aktiv → connection up ist SSH-sicher (keine aktive Verbindung drauf)
        sudo nmcli connection up "$CON" 2>/dev/null \
            && _log "$CON: Interface hochgefahren (war inaktiv)" \
            || _log "$CON: connection up fehlgeschlagen – Metrik wirkt nach nächstem Reconnect"
    fi
}

_apply_con "$ETH_CON"
[ -n "$LTE_EXISTS" ] && _apply_con "$LTE_CON"

exit 0
