#!/bin/bash

set -e

# ============================================================
# Preparação de VM Debian 13
#
# - Configura hostname
# - Configura domínio
# - Detecta interfaces diretamente do sistema
# - Recria /etc/network/interfaces do ZERO
# - Permite DHCP ou IP estático por interface
# - Limpa histórico
# - Desliga a máquina ao final
# ============================================================


# ------------------------------------------------------------
# Verifica root
# ------------------------------------------------------------

if [ "$EUID" -ne 0 ]; then
    echo "ERRO: execute este script como root."
    exit 1
fi


# ============================================================
# HOSTNAME / DOMÍNIO
# ============================================================

echo
echo "============================================================"
echo " CONFIGURAÇÃO DO HOST"
echo "============================================================"
echo

while true; do
    read -rp "Novo nome da máquina: " NEW_HOSTNAME

    if [ -n "$NEW_HOSTNAME" ]; then
        break
    fi

    echo "O nome da máquina não pode ficar vazio."
done


while true; do
    read -rp "Domínio (ex.: fatec.local): " NEW_DOMAIN

    if [ -n "$NEW_DOMAIN" ]; then
        break
    fi

    echo "O domínio não pode ficar vazio."
done


FQDN="${NEW_HOSTNAME}.${NEW_DOMAIN}"


# ------------------------------------------------------------
# Configura hostname
# ------------------------------------------------------------

echo "$NEW_HOSTNAME" > /etc/hostname

hostnamectl set-hostname "$NEW_HOSTNAME"


# ------------------------------------------------------------
# Recria /etc/hosts
# ------------------------------------------------------------

cat > /etc/hosts <<EOF
127.0.0.1       localhost
127.0.1.1       $FQDN $NEW_HOSTNAME

::1             localhost ip6-localhost ip6-loopback
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters
EOF


# ============================================================
# DETECÇÃO DAS INTERFACES
# ============================================================

echo
echo "============================================================"
echo " DETECÇÃO DAS INTERFACES DE REDE"
echo "============================================================"
echo


mapfile -t INTERFACES < <(
    ls /sys/class/net |
    grep -v '^lo$'
)


if [ "${#INTERFACES[@]}" -eq 0 ]; then
    echo "ERRO: nenhuma interface de rede encontrada."
    exit 1
fi


echo "Interfaces encontradas:"
echo

for IFACE in "${INTERFACES[@]}"; do

    MAC=$(cat "/sys/class/net/$IFACE/address" 2>/dev/null || echo "desconhecido")

    echo "  Interface: $IFACE"
    echo "  MAC:       $MAC"
    echo
done


# ============================================================
# RECRIA /etc/network/interfaces DO ZERO
# ============================================================

cat > /etc/network/interfaces <<EOF
# ============================================================
# Configuração de rede
# Gerada automaticamente
# ============================================================

auto lo
iface lo inet loopback

EOF


# ============================================================
# CONFIGURAÇÃO DAS INTERFACES
# ============================================================

for IFACE in "${INTERFACES[@]}"; do

    MAC=$(cat "/sys/class/net/$IFACE/address" 2>/dev/null || echo "desconhecido")

    echo
    echo "============================================================"
    echo " Interface: $IFACE"
    echo " MAC:       $MAC"
    echo "============================================================"
    echo
    echo "Como deseja configurar esta interface?"
    echo
    echo "  1) DHCP"
    echo "  2) IP estático"
    echo "  3) Não configurar"
    echo

    while true; do

        read -rp "Opção [1/2/3]: " OPTION

        case "$OPTION" in

            1)
                # ====================================================
                # DHCP
                # ====================================================

                cat >> /etc/network/interfaces <<EOF

# ------------------------------------------------------------
# Interface $IFACE - DHCP
# ------------------------------------------------------------

auto $IFACE
allow-hotplug $IFACE
iface $IFACE inet dhcp

EOF

                echo
                echo "$IFACE configurada para DHCP."

                break
                ;;


            2)
                # ====================================================
                # ESTÁTICO
                # ====================================================

                echo
                echo "Configuração estática de $IFACE"
                echo

                while true; do
                    read -rp "Endereço IPv4 (ex.: 192.168.10.20): " IPADDR

                    if [[ "$IPADDR" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]]; then
                        break
                    fi

                    echo "Endereço IPv4 inválido."
                done


                while true; do
                    read -rp "Prefixo da rede (ex.: 24): " PREFIX

                    if [[ "$PREFIX" =~ ^[0-9]+$ ]] &&
                       [ "$PREFIX" -ge 0 ] &&
                       [ "$PREFIX" -le 32 ]; then
                        break
                    fi

                    echo "Prefixo inválido. Informe um valor entre 0 e 32."
                done


                echo
                read -rp "Gateway [ENTER para nenhum]: " GATEWAY

                echo
                read -rp "Servidor(es) DNS separados por espaço [ENTER para nenhum]: " DNS

                echo
                read -rp "Domínio de pesquisa DNS [$NEW_DOMAIN]: " DNS_SEARCH

                if [ -z "$DNS_SEARCH" ]; then
                    DNS_SEARCH="$NEW_DOMAIN"
                fi


                cat >> /etc/network/interfaces <<EOF

# ------------------------------------------------------------
# Interface $IFACE - ESTÁTICA
# ------------------------------------------------------------

auto $IFACE
allow-hotplug $IFACE
iface $IFACE inet static
    address $IPADDR/$PREFIX
EOF


                if [ -n "$GATEWAY" ]; then
                    echo "    gateway $GATEWAY" >> /etc/network/interfaces
                fi


                if [ -n "$DNS" ]; then
                    echo "    dns-nameservers $DNS" >> /etc/network/interfaces
                fi


                if [ -n "$DNS_SEARCH" ]; then
                    echo "    dns-search $DNS_SEARCH" >> /etc/network/interfaces
                fi


                echo
                echo "$IFACE configurada com IP estático."

                break
                ;;


            3)
                echo
                echo "$IFACE não será configurada."
                break
                ;;


            *)
                echo
                echo "Opção inválida."
                ;;

        esac

    done

done


# ============================================================
# MOSTRA CONFIGURAÇÃO FINAL
# ============================================================

echo
echo "============================================================"
echo " CONFIGURAÇÃO FINAL"
echo "============================================================"
echo

echo "Hostname : $NEW_HOSTNAME"
echo "Domínio  : $NEW_DOMAIN"
echo "FQDN     : $FQDN"

echo
echo "------------------------------------------------------------"
echo "/etc/network/interfaces"
echo "------------------------------------------------------------"
echo

cat /etc/network/interfaces

echo
echo "------------------------------------------------------------"


# ============================================================
# LIMPA HISTÓRICO
# ============================================================

echo
echo "Limpando históricos..."


# ------------------------------------------------------------
# Root
# ------------------------------------------------------------

history -c 2>/dev/null || true

rm -f /root/.bash_history
rm -f /root/.zsh_history


# ------------------------------------------------------------
# Outros usuários
# ------------------------------------------------------------

while IFS=: read -r USERNAME _ UID _ _ HOME_DIR SHELL; do

    if [ "$UID" -ge 1000 ] && [ -d "$HOME_DIR" ]; then

        rm -f "$HOME_DIR/.bash_history"
        rm -f "$HOME_DIR/.zsh_history"

    fi

done < /etc/passwd


# ------------------------------------------------------------
# Remove histórico da sessão atual
# ------------------------------------------------------------

unset HISTFILE

export HISTFILE=/dev/null


# ============================================================
# SINCRONIZA DISCO
# ============================================================

sync


# ============================================================
# RESULTADO
# ============================================================

echo
echo "============================================================"
echo " CONFIGURAÇÃO CONCLUÍDA"
echo "============================================================"
echo
echo "Hostname : $NEW_HOSTNAME"
echo "FQDN     : $FQDN"
echo
echo "A configuração de rede foi recriada do zero."
echo
echo "A máquina será desligada."
echo


# ============================================================
# DESLIGA
# ============================================================

systemctl poweroff