#!/bin/bash
set -euo pipefail

LOG_TAG="nivato-logger-network"
WIFI_IFACE="${WIFI_IFACE:-wlan0}"

log() {
    echo "[$LOG_TAG] $*"
}

warn() {
    echo "[$LOG_TAG] UWAGA: $*" >&2
}

has_command() {
    command -v "$1" >/dev/null 2>&1
}

apply_netplan() {
    if [ ! -d /etc/netplan ]; then
        log "Brak /etc/netplan — pomijam netplan"
        return 0
    fi

    if ! has_command netplan; then
        warn "netplan nie jest zainstalowany — pomijam netplan apply"
        return 0
    fi

    log "Stosuję konfigurację netplan (renderer: NetworkManager)..."
    if netplan apply; then
        log "netplan apply — OK"
    else
        warn "netplan apply nie powiódł się — sprawdź /etc/netplan/"
    fi
}

stop_conflicting_services() {
    for unit in systemd-networkd dhcpcd; do
        if systemctl is-active --quiet "$unit" 2>/dev/null; then
            log "Wyłączam $unit (koliduje z NetworkManager)..."
            systemctl disable --now "$unit" || warn "Nie udało się wyłączyć $unit"
        fi
    done
}

restart_network_manager() {
    if ! has_command nmcli; then
        warn "nmcli niedostępne — NetworkManager nie jest zainstalowany"
        return 0
    fi

    log "Uruchamiam NetworkManager..."
    systemctl enable NetworkManager 2>/dev/null || true
    systemctl restart NetworkManager

    sleep 2

    if nmcli -t -f DEVICE device status 2>/dev/null | grep -qx "$WIFI_IFACE"; then
        log "Ustawiam $WIFI_IFACE jako managed..."
        nmcli device set "$WIFI_IFACE" managed yes 2>/dev/null || \
            warn "Nie udało się ustawić $WIFI_IFACE jako managed"
    else
        log "Interfejs $WIFI_IFACE nie wykryty — pomijam"
    fi

    if has_command nmcli; then
        log "Status urządzeń:"
        nmcli -t -f DEVICE,TYPE,STATE device status 2>/dev/null | while IFS= read -r line; do
            log "  $line"
        done
    fi
}

main() {
    log "Konfiguracja sieci pod WiFi (NetworkManager)..."

    apply_netplan
    stop_conflicting_services
    restart_network_manager

    log "Gotowe."
}

main "$@"
