#!/bin/bash

# Abhängigkeiten prüfen
if ! command -v dig &> /dev/null || ! command -v whiptail &> /dev/null; then
    echo "Fehler: 'dnsutils' (für dig) und 'whiptail' werden benötigt."
    exit 1
fi

# 1. Lokale DNS-Server auslesen
local_dns=$(grep "nameserver" /etc/resolv.conf | awk '{print $2}' | xargs)

# 2. Server-Auswahl per Checkliste
# Syntax: Tag Item Status
CHOICES=$(whiptail --title "DNS-Server Auswahl" --checklist \
"Wähle die DNS-Server für den Vergleich (Leertaste zum Wählen):" 15 60 5 \
"Cloudflare" "1.1.1.1 & 1.0.0.1" ON \
"Google" "8.8.8.8 & 8.8.4.4" OFF \
"Lokal_System" "Server aus /etc/resolv.conf" OFF \
"Lokal_Cache" "127.0.0.1 (Localhost)" OFF 3>&1 1>&2 2>&3)

# Server-Liste aufbauen
selected_servers=()
if [[ $CHOICES == *"Cloudflare"* ]]; then selected_servers+=("1.1.1.1" "1.0.0.1"); fi
if [[ $CHOICES == *"Google"* ]]; then selected_servers+=("8.8.8.8" "8.8.4.4"); fi
if [[ $CHOICES == *"Lokal_System"* ]]; then for s in $local_dns; do selected_servers+=("$s"); done; fi
if [[ $CHOICES == *"Lokal_Cache"* ]]; then selected_servers+=("127.0.0.1"); fi

# Abbrechen, falls nichts gewählt wurde
if [ ${#selected_servers[@]} -eq 0 ]; then exit 1; fi

# 3. Domain Eingabe
target_domain=$(whiptail --title "Domain Abfrage" --inputbox "Welche Domain soll geprüft werden?" 10 60 "google.com" 3>&1 1>&2 2>&3)
if [ -z "$target_domain" ]; then exit 1; fi

# 4. Record-Typen Auswahl
TYPES=$(whiptail --title "Record Typen" --checklist \
"Welche Records sollen geprüft werden?" 15 60 6 \
"A" "IPv4 Adresse" ON \
"AAAA" "IPv6 Adresse" OFF \
"MX" "Mail Exchange" OFF \
"NS" "Nameserver" OFF \
"TXT" "Text Records" OFF \
"CNAME" "Alias" OFF 3>&1 1>&2 2>&3)

# 5. Verarbeitung & Ausgabe
echo -e "\nAbfrage läuft... (Worst-Case Szenario Analyse)\n"
output_file=$(mktemp)

# Tabellen-Header
printf "%-18s | %-6s | %-8s | %-s\n" "SERVER" "TYPE" "TTL" "DATA" >> "$output_file"
echo "--------------------------------------------------------------------------------" >> "$output_file"

for server in "${selected_servers[@]}"; do
    # Bereinige Typen-String (Entferne Anführungszeichen)
    clean_types=$(echo $TYPES | tr -d '"')
    for type in $clean_types; do
        # Abfrage mit Timeouts für den Worst-Case (Server reagiert nicht)
        result=$(dig @"$server" "$target_domain" "$type" +noall +answer +time=2 +tries=1)
        
        if [ -z "$result" ]; then
            printf "%-18s | %-6s | %-8s | %s\n" "$server" "$type" "TIMEOUT" "Keine Antwort" >> "$output_file"
        else
            while read -r line; do
                ttl=$(echo "$line" | awk '{print $2}')
                # Extrahiere die Antwort (alles nach dem Typ-Feld)
                answer=$(echo "$line" | awk '{for(i=5;i<=NF;i++) printf "%s ", $i; print ""}' | xargs)
                printf "%-18s | %-6s | %-8s | %s\n" "$server" "$type" "$ttl" "$answer" >> "$output_file"
            done <<< "$result"
        fi
    done
done

# Ergebnis in einer Scrollbox anzeigen
whiptail --title "DNS Analyse Ergebnisse" --textbox "$output_file" 20 100
rm "$output_file"
