#!/bin/bash

set -u

STATIC_IP="10.100.0.2"
STATIC_MASK="24"
STATIC_GATE="10.100.0.1"
STATIC_DNS="8.8.8.8"

require_root() {
    if [[ $EUID -ne 0 ]]; then
        echo "Скрипт нужно запускать от root (sudo)." >&2
        exit 1
    fi
}

pick_iface() {
    read -rp "Введите имя сетевого интерфейса: " IFACE
    if [[ ! -d "/sys/class/net/$IFACE" ]]; then
        echo "Интерфейс $IFACE не найден." >&2
        IFACE=""
    fi
}

show_link_info() {
    [[ -z "${IFACE:-}" ]] && pick_iface
    [[ -z "${IFACE:-}" ]] && return

    echo "--- Драйвер / шина ---"
    ethtool -i "$IFACE" 2>/dev/null

    BUS_INFO=$(ethtool -i "$IFACE" 2>/dev/null | awk -F': ' '/bus-info/{print $2}')
    if [[ -n "$BUS_INFO" ]]; then
        echo "--- Модель карты ---"
        lspci -s "$BUS_INFO"
    fi

    echo "--- Скорость / duplex / link ---"
    ethtool "$IFACE" 2>/dev/null | grep -E "Speed|Duplex|Link detected"

    echo "--- MAC-адрес ---"
    ip -brief link show "$IFACE"
}

show_ipv4_info() {
    [[ -z "${IFACE:-}" ]] && pick_iface
    [[ -z "${IFACE:-}" ]] && return

    echo "--- IPv4 адрес и маска ---"
    ip -4 addr show dev "$IFACE"

    echo "--- Gateway по умолчанию ---"
    ip route show default

    echo "--- DNS (/etc/resolv.conf) ---"
    cat /etc/resolv.conf
}

configure_static() {
    [[ -z "${IFACE:-}" ]] && pick_iface
    [[ -z "${IFACE:-}" ]] && return

    ip addr flush dev "$IFACE"
    ip addr add "${STATIC_IP}/${STATIC_MASK}" dev "$IFACE"
    ip link set "$IFACE" up
    ip route replace default via "$STATIC_GATE" dev "$IFACE"
    echo "nameserver $STATIC_DNS" > /etc/resolv.conf

    echo "Сценарий #1 применён: $STATIC_IP/$STATIC_MASK, gw $STATIC_GATE, dns $STATIC_DNS"
}

configure_dhcp() {
    [[ -z "${IFACE:-}" ]] && pick_iface
    [[ -z "${IFACE:-}" ]] && return

    dhclient -r "$IFACE" 2>/dev/null
    ip addr flush dev "$IFACE"
    dhclient "$IFACE"

    echo "Сценарий #2 применён (DHCP) на $IFACE"
}

menu() {
    while true; do
        cat <<EOF

-- Настройка сети (интерфейс: ${IFACE:-не выбран}) --
1) Модель карты / скорость / duplex / link / MAC
2) Текущая конфигурация IPv4 (ip, mask, gate, dns)
3) Настроить по сценарию #1 (статика)
4) Настроить по сценарию #2 (DHCP)
5) Сменить интерфейс
0) Выход
EOF
        read -rp "Выбор: " choice
        case "$choice" in
            1) show_link_info ;;
            2) show_ipv4_info ;;
            3) configure_static ;;
            4) configure_dhcp ;;
            5) pick_iface ;;
            0) exit 0 ;;
            *) echo "Некорректный выбор" ;;
        esac
    done
}

require_root
menu
