#!/bin/bash
#=======================================================#
#                                                       #
#          Desenvolvido por Daniel Kondlatsch           #
#     Objetivo: Buscar informacoes sobre o hardware     #
#         versao do Kernel Linux, CPU bits, etc         #
#                                                       #
#=======================================================#

# --- Cores ---
RESET="\e[0m"
BOLD="\e[1m"
BLUE="\e[34m"
AMBER="\e[33m"
GRAY="\e[90m"

# --- Coleta de dados ---
BIT=$(getconf LONG_BIT)
CPU=$(grep -om1 'lm' /proc/cpuinfo)
VER=$(uname -mrs)
MOD=$(grep -m1 'Model'    /proc/cpuinfo | awk -F': ' '{print $2}')
HDW=$(grep -m1 'Hardware' /proc/cpuinfo | awk -F': ' '{print $2}')
OSV=$(grep 'PRETTY_NAME' /etc/os-release | sed 's/PRETTY_NAME="\(.*\)"/\1/')
HOST=$(hostname)
UPTIME=$(uptime -p 2>/dev/null || uptime)
MEM_TOTAL=$(awk '/MemTotal/    {printf "%.0f MB", $2/1024}' /proc/meminfo)
MEM_FREE=$(awk  '/MemAvailable/{printf "%.0f MB", $2/1024}' /proc/meminfo)

# --- Rede: IPs de todas as interfaces ativas (exceto loopback) ---
get_ips() {
    ip -o -4 addr show 2>/dev/null \
        | awk '$2 != "lo" {printf "%s: %s\n", $2, $4}' \
        | sed 's|/[0-9]*||'
}

# --- Temperatura da CPU ---
get_temp() {
    local temp=""

    # Raspberry Pi / ARM — thermal_zone0
    if [[ -f /sys/class/thermal/thermal_zone0/temp ]]; then
        local raw
        raw=$(< /sys/class/thermal/thermal_zone0/temp)
        temp=$(awk "BEGIN {printf \"%.1f°C\", $raw/1000}")

    # sensors (lm-sensors) — x86/x64
    elif command -v sensors &>/dev/null; then
        temp=$(sensors 2>/dev/null \
            | grep -m1 -Eo '[0-9]+\.[0-9]+°C' \
            | head -1)
    fi

    echo "${temp:-N/A}"
}

# --- Uso de disco ---
get_discos() {
    df -h --output=target,size,used,avail,pcent 2>/dev/null \
        | awk 'NR==1 {next} /^\/dev|^\/$|^\/boot/ {
            printf "  %-20s %6s total  %6s usado  %6s livre  %s\n",
                   $1, $2, $3, $4, $5
        }'
}

# --- Funções de exibição ---
secao() {
    echo -e "\n${BLUE}${BOLD}  ══╡ $1 ╞══${RESET}"
}

campo() {
    printf "  ${AMBER}%-20s${RESET} %s\n" "$1" "$2"
}

linha() {
    echo -e "${GRAY}  ──────────────────────────────────────────────────${RESET}"
}

# ═══════════════════════════════════════════════════════
#                        SAÍDA
# ═══════════════════════════════════════════════════════

echo -e "${BLUE}${BOLD}"
echo "  ╔══════════════════════════════════════════════════╗"
echo "  ║              INFORMAÇÕES DO SISTEMA              ║"
echo "  ╚══════════════════════════════════════════════════╝"
echo -e "${RESET}"

# --- Hardware ---
secao "HARDWARE"
linha
[[ -n "$MOD" ]] && campo "Modelo:"    "$MOD"
[[ -n "$HDW" ]] && campo "Hardware:"  "$HDW"
campo "Hostname:"  "$HOST"

# --- Software ---
secao "SOFTWARE"
linha
campo "Sistema:"   "$OSV"
campo "Kernel:"    "$VER"
campo "Bits:"      "${BIT}-bit $([[ "$CPU" == "lm" ]] && echo "(CPU 64-bit)" || echo "(CPU 32-bit)")"
campo "Uptime:"    "$UPTIME"

# --- Memória ---
secao "MEMÓRIA"
linha
campo "Total:"       "$MEM_TOTAL"
campo "Disponível:"  "$MEM_FREE"

# --- CPU ---
secao "CPU"
linha
lscpu | grep -E 'Architecture|Model name|CPU\(s\)|Thread|Core' \
    | while IFS=: read -r key val; do
        campo "$(echo "$key" | xargs):" "$(echo "$val" | xargs)"
    done
campo "Temperatura:" "$(get_temp)"

# --- Rede ---
secao "REDE"
linha
while IFS= read -r line; do
    iface=$(echo "$line" | awk '{print $1}')
    ip=$(echo "$line"    | awk '{print $2}')
    campo "$iface" "$ip"
done < <(get_ips)

# --- Disco ---
secao "DISCO"
linha
echo -e "${GRAY}"
get_discos
echo -e "${RESET}"

echo -e "${GRAY}  ──────────────────────────────────────────────────${RESET}\n"
