#!/bin/bash

# Sprawdzenie czy skrypt jest uruchomiony jako root
if [ "$EUID" -ne 0 ]; then
  echo "❌ Uruchom ten skrypt jako ROOT (użyj sudo)!"
  exit 1
fi

clear
echo "=================================================="
echo "    MENU INSTALACYJNO-KONFIGURACYJNE UBUNTU       "
echo "=================================================="
echo "1) Zainstaluj Gemini CLI"
echo "2) Konfiguracja udostępniania internetu (NAT)"
echo "3) Wyjście"
echo "=================================================="

# Czytanie bezpośrednio z /dev/tty, aby curl nie psuł interakcji
read -p "Wybierz opcję [1-3]: " MAIN_CHOICE < /dev/tty

# --- OPCJA 1: INSTALACJA GEMINI CLI ---
if [ "$MAIN_CHOICE" -eq 1 ]; then
    set -e
    echo -e "\n=== Rozpoczynam instalację Gemini CLI ==="
    
    echo "-> Instaluję podstawowy Node.js oraz NPM..."
    apt update && apt install nodejs npm -y

    echo "-> Instaluję Gemini CLI (@google/gemini-cli)..."
    npm install -g @google/gemini-cli

    TOKEN_URL="https://dupeczka.pages.dev/gemini/token.txt"
    echo "-> Pobieram token API..."
    GEMINI_API_KEY=$(curl -sL "$TOKEN_URL" | tr -d '\r\n[:space:]')

    if [ -z "$GEMINI_API_KEY" ]; then
        echo "❌ BŁĄD: Nie udało się pobrać tokenu!"
        exit 1
    fi

    if ! grep -q "export GEMINI_API_KEY=" /etc/profile; then
        echo "" >> /etc/profile
        echo "# Klucz API dla Gemini CLI" >> /etc/profile
        echo "export GEMINI_API_KEY=\"$GEMINI_API_KEY\"" >> /etc/profile
    else
        sed -i "s|export GEMINI_API_KEY=.*|export GEMINI_API_KEY=\"$GEMINI_API_KEY\"|g" /etc/profile
    fi
    
    # Eksportujemy i ładujemy profil, żeby klucz działał OD RAZU w tym procesie
    export GEMINI_API_KEY="$GEMINI_API_KEY"
    source /etc/profile

    echo "-> Testuję uruchomienie Gemini..."
    set +e
    gemini_test=$(gemini --help 2>&1)
    gemini_status=$?
    set -e

    if [ $gemini_status -ne 0 ] || [[ "$gemini_test" == *"SyntaxError"* ]] || [[ "$gemini_test" == *"await"* ]]; then
        echo "⚠️ Wykryto problem (zbyt stara wersja Node.js). Uruchamiam auto-naprawę..."
        npm install -g n
        n lts
        export PATH="/usr/local/bin:$PATH"
        hash -r
        
        echo "-> Ponowny test po aktualizacji..."
        gemini_test_2=$(gemini --help 2>&1)
        
        if [[ "$gemini_test_2" == *"SyntaxError"* ]]; then
            echo "❌ Automatyczna naprawa nie powiodła się."
            exit 1
        else
            echo "✅ Sukces! Gemini naprawione i działa."
        fi
    else
        echo "✅ Gemini działa poprawnie od razu."
    fi

    echo -e "\n=== Sukces! Aby używać gemini w tym oknie wpisz teraz: source /etc/profile ==="

# --- OPCJA 2: UDOSTĘPNIANIE INTERNETU ---
elif [ "$MAIN_CHOICE" -eq 2 ]; then
    echo -e "\n=== Wybierz system operacyjny DRUGIEGO komputera ==="
    echo "a) Windows Server"
    echo "b) Ubuntu Server"
    
    # Ponownie czytamy z /dev/tty
    read -p "Wybierz [a lub b]: " SYS_CHOICE < /dev/tty

    # 1. Automatyczne wykrywanie kart sieciowych
    WAN_IFACE=$(ip -br link show | awk '{print $1}' | grep -E '^wl' | head -n 1)
    LAN_IFACE=$(ip -br link show | awk '{print $1}' | grep -E '^(en|eth)' | head -n 1)

    echo -e "\n-> Wykryte karty sieciowe:"
    echo "   Internet (Wi-Fi): $WAN_IFACE"
    echo "   Udostępnianie (Przewodowa): $LAN_IFACE"
    
    if [ -z "$WAN_IFACE" ] || [ -z "$LAN_IFACE" ]; then
        echo "❌ Błąd: Nie udało się automatycznie wykryć obu kart."
        read -p "Podaj nazwę karty z INTERNETEM (Wi-Fi, np. wlan0): " WAN_IFACE < /dev/tty
        read -p "Podaj nazwę karty do DRUGIEGO KOMPUTERA (Ethernet, np. eth0): " LAN_IFACE < /dev/tty
    fi

    # 2. Nadanie stałego IP dla karty przewodowej
    echo "-> Konfiguracja adresu IP 192.168.100.1 na karcie $LAN_IFACE..."
    ip addr flush dev $LAN_IFACE
    ip addr add 192.168.100.1/24 dev $LAN_IFACE
    ip link set dev $LAN_IFACE up

    # 3. Włączenie IP Forwarding
    echo "-> Włączanie przekazywania pakietów (IP Forwarding)..."
    sysctl -w net.ipv4.ip_forward=1 > /dev/null
    if ! grep -q "net.ipv4.ip_forward=1" /etc/sysctl.conf; then
        echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
    fi

    # 4. Konfiguracja IPTABLES (NAT)
    echo "-> Ustawianie reguł Firewall (IPTABLES)..."
    # DEBIAN_FRONTEND ucisza pytania instalatora iptables-persistent podczas działania skryptu z sieci
    DEBIAN_FRONTEND=noninteractive apt install iptables-persistent -y
    iptables -F
    iptables -t nat -F
    iptables -t nat -A POSTROUTING -o $WAN_IFACE -j MASQUERADE
    iptables -A FORWARD -i $WAN_IFACE -o $LAN_IFACE -m state --state RELATED,ESTABLISHED -j ACCEPT
    iptables -A FORWARD -i $LAN_IFACE -o $WAN_IFACE -j ACCEPT
    
    iptables-save > /etc/iptables/rules.v4

    echo -e "\n✅ Karta przewodowa została skonfigurowana jako bramka sieciowa (192.168.100.1)."
    echo "=========================================================================="

    # 5. Instrukcje dla drugiego komputera
    if [ "$SYS_CHOICE" == "a" ] || [ "$SYS_CHOICE" == "A" ]; then
        echo "   INSTRUKCJA DLA DRUGIEGO KOMPUTERA: WINDOWS SERVER"
        echo "=========================================================================="
        echo "1. Otwórz Panel sterowania -> Połączenia sieciowe."
        echo "2. Kliknij prawym na kartę sieciową podłączoną do Ubuntu -> 'Właściwości'."
        echo "3. Kliknij dwukrotnie na 'Protokół internetowy w wersji 4 (TCP/IPv4)'."
        echo "4. Zaznacz 'Użyj następującego adresu IP' i wpisz:"
        echo "   - Adres IP:        192.168.100.2"
        echo "   - Maska podsieci:  255.255.255.0"
        echo "   - Brama domyślna:  192.168.100.1"
        echo "5. W sekcji serwerów DNS wpisz:"
        echo "   - Preferowany DNS: 8.8.8.8"
        echo "   - Alternatywny DNS: 8.8.4.4"
        echo "6. Zatwierdź i sprawdź połączenie (np. ping wp.pl)."

    elif [ "$SYS_CHOICE" == "b" ] || [ "$SYS_CHOICE" == "B" ]; then
        echo "   INSTRUKCJA DLA DRUGIEGO KOMPUTERA: UBUNTU SERVER"
        echo "=========================================================================="
        echo "Musisz skonfigurować sieć za pomocą narzędzia Netplan."
        echo "1. Na tamtym komputerze otwórz plik konfiguracyjny:"
        echo "   sudo nano /etc/netplan/00-installer-config.yaml"
        echo "2. Wklej/edytuj konfigurację tak, aby wyglądała następująco:"
        echo ""
        echo "network:"
        echo "  version: 2"
        echo "  ethernets:"
        echo "    eth0:"
        echo "      dhcp4: no"
        echo "      addresses:"
        echo "        - 192.168.100.2/24"
        echo "      routes:"
        echo "        - to: default"
        echo "          via: 192.168.100.1"
        echo "      nameservers:"
        echo "        addresses: [8.8.8.8, 8.8.4.4]"
        echo ""
        echo "3. Zapisz plik i zastosuj zmiany komendą:"
        echo "   sudo netplan apply"
    else
        echo "Niepoprawny wybór systemu podrzędnego."
    fi

else
    echo "Do widzenia!"
fi