#!/bin/bash
set -euo pipefail

ETH="${ETH_IFACE:-eth0}"
METHOD="${1:?method: auto|manual}"

log() { echo "[nivato-network] $*"; }
warn() { echo "[nivato-network] UWAGA: $*" >&2; }

find_connection() {
    # 1. Aktywne połączenie
    local conn
    conn=$(nmcli -g GENERAL.CONNECTION device show "$ETH" 2>/dev/null || true)
    if [ -n "$conn" ] && [ "$conn" != "--" ]; then
        echo "$conn"
        return
    fi

    # 2. Szukaj po connection.interface-name wśród połączeń ethernet
    while IFS= read -r name; do
        [ -z "$name" ] && continue
        local iface
        iface=$(nmcli -g connection.interface-name con show "$name" 2>/dev/null || true)
        if [ "$iface" = "$ETH" ]; then
            echo "$name"
            return
        fi
    done < <(nmcli -t -f NAME,TYPE con show 2>/dev/null | awk -F: '$2=="802-3-ethernet" {print $1}')

    # 3. Utwórz nowe połączenie
    local new_conn="${ETH}-config"
    log "Tworzę nowe połączenie: $new_conn"
    nmcli con add type ethernet ifname "$ETH" con-name "$new_conn" ipv4.method auto 2>/dev/null || true
    echo "$new_conn"
}

CONN=$(find_connection)
log "Konfiguracja połączenia: $CONN"

if [ "$METHOD" = "auto" ]; then
    nmcli con modify "$CONN" \
        ipv4.method auto \
        ipv4.addresses "" \
        ipv4.gateway "" \
        ipv4.dns ""
    log "Ustawiono DHCP"
else
    ADDRESS="${2:?adres/prefiks dla trybu manual}"
    GATEWAY="${3:-}"
    DNS="${4:-}"
    nmcli con modify "$CONN" \
        ipv4.method manual \
        ipv4.addresses "$ADDRESS" \
        ipv4.gateway "$GATEWAY" \
        ipv4.dns "$DNS"
    log "Ustawiono statyczne IP: $ADDRESS gw=$GATEWAY dns=$DNS"
fi

nmcli con up "$CONN" 2>/dev/null || nmcli con up ifname "$ETH" 2>/dev/null || \
    warn "Nie udało się aktywować połączenia (może wymagać ponownego podłączenia kabla)"

log "Gotowe."
