#!/bin/bash

set -e

# ============================================================
# Renomear VM Debian 13
#
# - Altera hostname
# - Altera domínio
# - Atualiza /etc/hostname
# - Atualiza /etc/hosts
# - Limpa históricos
# - Desliga a máquina ao final
#
# Compatível com:
# curl -fsSL URL | bash
# ============================================================


# ============================================================
# FUNÇÕES
# ============================================================

read_tty() {
    local prompt="$1"
    local varname="$2"

    read -rp "$prompt" "$varname" < /dev/tty
}


valid_name() {
    local value="$1"

    [[ "$value" =~ ^[a-zA-Z0-9]([a-zA-Z0-9.-]*[a-zA-Z0-9])?$ ]]
}


# ============================================================
# ROOT
# ============================================================

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


# ============================================================
# CABEÇALHO
# ============================================================

clear 2>/dev/null || true

echo
echo "============================================================"
echo " RENOMEAR MÁQUINA - DEBIAN 13"
echo "============================================================"
echo


# ============================================================
# HOSTNAME
# ============================================================

while true; do

    read_tty "Novo nome da máquina: " NEW_HOSTNAME

    if [ -z "$NEW_HOSTNAME" ]; then
        echo "O nome da máquina não pode ficar vazio."
        continue
    fi

    if ! valid_name "$NEW_HOSTNAME"; then
        echo "Hostname inválido."
        continue
    fi

    break

done


# ============================================================
# DOMÍNIO
# ============================================================

while true; do

    read_tty "Domínio (ex.: fatec.local): " NEW_DOMAIN

    if [ -z "$NEW_DOMAIN" ]; then
        echo "O domínio não pode ficar vazio."
        continue
    fi

    if ! valid_name "$NEW_DOMAIN"; then
        echo "Domínio inválido."
        continue
    fi

    break

done


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


# ============================================================
# CONFIRMAÇÃO
# ============================================================

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

read_tty "Confirmar alteração? [S/n]: " CONFIRM


case "$CONFIRM" in
    n|N|nao|não|NAO|NÃO)
        echo
        echo "Operação cancelada."
        exit 0
        ;;
esac


# ============================================================
# CONFIGURA HOSTNAME
# ============================================================

echo
echo "Alterando hostname..."

echo "$NEW_HOSTNAME" > /etc/hostname

hostnamectl set-hostname "$NEW_HOSTNAME"


# ============================================================
# RECRIA /etc/hosts
# ============================================================

echo "Atualizando /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


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

echo
echo "============================================================"
echo " NOVA CONFIGURAÇÃO"
echo "============================================================"
echo
echo "Hostname : $NEW_HOSTNAME"
echo "Domínio  : $NEW_DOMAIN"
echo "FQDN     : $FQDN"
echo

read_tty "Pressione ENTER para limpar o histórico e desligar..." FINAL_CONFIRM


# ============================================================
# LIMPEZA DO HISTÓRICO
# ============================================================

echo
echo "Limpando históricos..."


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

rm -f /root/.bash_history
rm -f /root/.zsh_history
rm -f /root/.python_history
rm -f /root/.lesshst
rm -f /root/.wget-hsts


# Usuários normais
while IFS=: read -r \
    USERNAME \
    PASSWORD_FIELD \
    USER_ID \
    GROUP_ID \
    GECOS \
    HOME_DIR \
    USER_SHELL

do

    if [ "$USER_ID" -ge 1000 ] 2>/dev/null &&
       [ "$USER_ID" -lt 65534 ] 2>/dev/null &&
       [ -d "$HOME_DIR" ]; then

        rm -f "$HOME_DIR/.bash_history"
        rm -f "$HOME_DIR/.zsh_history"
        rm -f "$HOME_DIR/.python_history"
        rm -f "$HOME_DIR/.lesshst"
        rm -f "$HOME_DIR/.wget-hsts"

    fi

done < /etc/passwd


# Evita regravar o histórico desta sessão
history -c 2>/dev/null || true
unset HISTFILE
export HISTFILE=/dev/null


# ============================================================
# FINALIZA
# ============================================================

sync

echo
echo "============================================================"
echo " CONFIGURAÇÃO CONCLUÍDA"
echo "============================================================"
echo
echo "Hostname : $NEW_HOSTNAME"
echo "FQDN     : $FQDN"
echo
echo "Desligando a máquina..."
echo

sleep 3

systemctl poweroff