#!/usr/bin/env bash
# =========================================================
# Nom         : check_temp_all.sh
# Objet       : Afficher les températures système en console
#
# Description :
#   Ce script affiche les températures système détectées
#   automatiquement via la commande `sensors` (lm-sensors)
#   et, si disponible, les températures NVMe et GPU.
#
#   - Classe les températures par catégorie : CPU, Carte mère,
#     RAM, NVMe, GPU, et autres capteurs.
#   - Affiche en couleur avec icônes pour faciliter la lecture.
#   - Compatible avec `--raw` pour afficher la sortie brute
#     de `sensors`, et `--watch` pour rafraîchissement continu.
#
#   - Parse automatiquement `sensors` (lm-sensors)
#   - Regroupe par catégories : CPU, Carte mère, RAM, NVMe, GPU, Autres
#   - Couleurs + emojis selon niveau de chauffe
#   - Supporte les formats +59.0°C et +59.0 C
#
# Niveaux visuels (pas encore implanter):
#   🔵 < 30°C   | 🟢 30–60°C | 🟡 60–80°C | 🔴 > 80°C
#
# Utilisation :
#   ./check_temp_all.sh           → Affichage normal
#   ./check_temp_all.sh --raw     → Sortie brute de `sensors`
#   ./check_temp_all.sh --watch   → Rafraîchit toutes les 2s
#
# Prérequis :
#   - Linux (Debian/Proxmox/Ubuntu/…)
#   - lm-sensors installé et configuré (sudo sensors-detect)
#   - (Optionnel) nvidia-smi pour GPU NVIDIA
# =========================================================


set -euo pipefail
LC_ALL=C

# Couleurs
RED="\033[1;31m"
GREEN="\033[1;32m"
YELLOW="\033[1;33m"
CYAN="\033[1;36m"
RESET="\033[0m"
BOLD="\033[1m"

show_help() {
    echo -e "${BOLD}Usage:${RESET} $0 [--raw] [--watch]"
    echo "  --raw     : Affiche la sortie brute de sensors"
    echo "  --watch   : Rafraîchit toutes les 2 secondes"
    echo "  --help    : Affiche cette aide"
}

print_section() {
    local title="$1"
    echo -e "\n${CYAN}--- $title ---${RESET}"
}

# Options
RAW_MODE=false
WATCH_MODE=false
for arg in "$@"; do
    case "$arg" in
        --raw) RAW_MODE=true ;;
        --watch) WATCH_MODE=true ;;
        --help) show_help; exit 0 ;;
        *) echo -e "${RED}Option inconnue:${RESET} $arg"; exit 1 ;;
    esac
done

# Mode --raw
if $RAW_MODE; then
    sensors
    exit 0
fi

collect_temps() {
    local sensors_out
    sensors_out="$(sensors 2>/dev/null || true)"

    echo -e "${BOLD}==== TEMPÉRATURES SYSTÈME (auto) ====${RESET}"

    # CPU
    print_section "CPU"
    cpu_lines=$(echo "$sensors_out" | grep -E 'Core [0-9]+:|Package id')
    if [[ -n "$cpu_lines" ]]; then
        echo "$cpu_lines" | awk -v G="$GREEN" -v R="$RESET" '{printf "🖥️  %-15s %s%s\n", $1" "$2, G $3, R}'
    else
        echo "(aucune donnée)"
    fi

    # Carte mère / chipset
    print_section "Carte mère"
    echo "$sensors_out" | grep -E 'CPUTIN|SYSTIN|PECI Agent 0' || echo "(aucune donnée)"

    # RAM
    print_section "RAM"
    echo "$sensors_out" | grep -i 'DIMM' || echo "(aucune donnée)"

    # NVMe via sensors
    print_section "NVMe"
    echo "$sensors_out" | awk '
        /^nvme-/ {dev=$1; next}
        /Composite/ {
            gsub(/\+|°C|C|,/,"",$2)
            printf "💾 %s : \033[1;32m%s°C\033[0m\n", dev, $2
        }
    ' || echo "(aucune donnée)"

    # GPU
    print_section "GPU"
    if command -v nvidia-smi &>/dev/null; then
        nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader | while read -r t; do
            echo "🎮 NVIDIA GPU : ${t}°C"
        done
    else
        echo "(aucune donnée)"
    fi

    # Autres capteurs
    print_section "Autres"
    echo "$sensors_out" | grep -i 'temp' | grep -Ev 'Core|Package|CPUTIN|SYSTIN|PECI|DIMM|Composite' || echo "(aucune donnée)"

    echo -e "${BOLD}=====================================${RESET}"
}

# Mode watch
if $WATCH_MODE; then
    while true; do
        clear
        collect_temps
        sleep 2
    done
else
    collect_temps
fi
