#!/bin/bash

# Standardwerte setzen
SAAL=""
NUMMER=""

# Optionen mit getopts parsen
while getopts "s:n:" opt; do
  case $opt in
    s) SAAL="$OPTARG" ;;
    n) NUMMER="$OPTARG" ;;
    *) echo "Nutzung: $0 -s <SAAL> -n <NUMMER>" >&2; exit 1 ;;
  esac
done

# Gültigkeit prüfen
if [[ -z "$SAAL" ]]; then
  echo "Fehlender SAAL! Nutzung: $0 -s <SAAL> -n <NUMMER>"
  exit 1
fi

DATE=$(date "+%Y%m%d")

if [[ -z "$NUMMER" ]]; then 
    NUMMER="01"
else
    if [[ ! "$NUMMER" =~ ^[0-9]+$ ]]; then
        echo "Fehler: '$NUMMER' ist keine gültige Zahl."
        exit 1
    fi

    if (( NUMMER >= 1 && NUMMER <= 99 )); then
        NUMMER=$(printf "%02d" "$NUMMER")
    else
        echo "Fehler: Zahl $NUMMER liegt nicht zwischen 1 und 99."
        exit 1
    fi
fi

SN="${DATE}${NUMMER}"

echo "Aufräumen und Installation..."
apt purge -y bind9
rm -fr /var/cache/bind/ /etc/bind/
apt update
apt install -y bind9

# Netzwerk-Logik
IP=$(ip a s enp0s3 | grep "inet\>" | awk '{print $2}')
OKT=$(echo $IP | cut -f 3 -d .)
DNSGW="192.168.$SAAL.88"
DMZ="10.88.$OKT.0/24"
LAN="172.26.$OKT.0/24"
SERVER="10.$OKT.1.0/24"
OVPN="172.20.$OKT.0/24"


# 1. Konfigurationsdateien schreiben
cat <<HERE > /etc/bind/named.conf.options
options {
  directory "/var/cache/bind";
  forwarders { $DNSGW; };
  allow-query { any; };
  allow-recursion { $DMZ; $LAN; $SERVER; $OVPN; 127.0.0.1; };
  allow-transfer { 127.0.0.1; };
  dnssec-validation no;
  listen-on-v6 { none; };
  listen-on { any; };
};
HERE

cat <<HERE > /etc/bind/named.conf.local
zone "it$OKT.int" {
    type master;
    file "/var/cache/bind/it$OKT.int";
};
zone "$OKT.88.10.in-addr.arpa" {
    type master;
    file "/var/cache/bind/$OKT.88.10.in-addr.arpa";
};
HERE

# 2. Zone Files erstellen
cat <<HERE > /var/cache/bind/it$OKT.int
\$TTL 1
@   IN SOA ns.it$OKT.int. technik.it$OKT.int. ( $SN 14400 3600 3600000 86400 )
    NS      ns.it$OKT.int.
                       NS      ns.it$OKT.int.
                       MX 10   mail.it$OKT.int.     
fw                     IN      A       10.88.$OKT.1
ns                     IN      A       10.88.$OKT.21
sftp                   IN      A       10.88.$OKT.15
proxy                  IN      A       10.88.$OKT.4
mail                   IN      A       10.88.$OKT.3
www                    IN      A       10.88.$OKT.11
revproxy               IN      A       10.88.$OKT.41
checkmk                IN      A       10.88.$OKT.5 
ntp                    IN      A       10.88.$OKT.17
nextcloud              IN      A       10.88.$OKT.8
docker                 IN      A       10.88.$OKT.9
dhcp		       IN      A       172.26.$OKT.2  
smb		       IN      A       10.$OKT.1.2  
ldap		       IN      A       10.$OKT.1.3  
HERE

cat <<HERE > /var/cache/bind/$OKT.88.10.in-addr.arpa
\$TTL 1
@   IN SOA ns.it$OKT.int. technik.it$OKT.int. ( $SN 14400 3600 3600000 86400 )
    NS      ns.it$OKT.int.
1                      IN      PTR     fw.it$OKT.int.
21                     IN      PTR     ns.it$OKT.int.
3                      IN      PTR     mail.it$OKT.int.
4                      IN      PTR     proxy.it$OKT.int.
17                     IN      PTR     ntp.it$OKT.int.
11                     IN      PTR     www.it$OKT.int.
15                     IN      PTR     sftp.it$OKT.int.
41                     IN      PTR     revproxy.it$OKT.int.
5                      IN      PTR     checkmk.it$OKT.int.
8                      IN      PTR     docker.it$OKT.int.
9                      IN      PTR     nexcloud.it$OKT.int.
HERE

# --- SYNTAX PRÜFUNG ---
echo "Prüfe Konfiguration..."
named-checkconf /etc/bind/named.conf
if [ $? -ne 0 ]; then
    echo "Fehler in der named.conf!"
    exit 1
fi

echo "Prüfe Zone-Datei it$OKT.int..."
named-checkzone "it$OKT.int" "/var/cache/bind/it$OKT.int"
if [ $? -ne 0 ]; then
    echo "Fehler in der Zone-Datei!"
    exit 1
fi

echo "Alles OK. Restarting named..."
systemctl restart named

echo "Skript erfolgreich beendet."
