#!/bin/bash
# nas-upgrade-system — Applique les mises à jour système (apt full-upgrade)
# Usage : nas-upgrade-system
# Mode HA (non-interactif) : applique directement, output JSON
# Mode terminal : affiche le bilan + confirmation avant d'appliquer

set -euo pipefail

if [ -t 1 ]; then INTERACTIVE=true; else INTERACTIVE=false; fi

# Couleurs (mode terminal uniquement)
if $INTERACTIVE; then
    RED='\033[0;31m'
    GREEN='\033[0;32m'
    YELLOW='\033[1;33m'
    CYAN='\033[0;36m'
    BOLD='\033[1m'
    RESET='\033[0m'
else
    RED='' GREEN='' YELLOW='' CYAN='' BOLD='' RESET=''
fi

# S'assurer que la liste est à jour
if $INTERACTIVE; then
    echo -e "${BOLD}--- Mise à jour de la liste des paquets ---${RESET}"
fi
apt-get update -qq 2>/dev/null

# Récupérer les paquets upgradables
upgradable=$(apt list --upgradable 2>/dev/null | grep -v '^Listing' | grep -v '^$')
count=$(echo "$upgradable" | grep -c . || true)

if [ "$count" -eq 0 ]; then
    if $INTERACTIVE; then
        echo -e "${GREEN}✅ Système déjà à jour, rien à faire.${RESET}"
    else
        printf '{"status":"already_up_to_date","upgraded":0,"reboot_required":false}\n'
    fi
    exit 0
fi

if $INTERACTIVE; then
    echo ""
    echo -e "${BOLD}--- Paquets à mettre à jour (${count}) ---${RESET}"
    while IFS= read -r line; do
        [[ -z "$line" ]] && continue
        name=$(echo "$line" | cut -d'/' -f1)
        available=$(echo "$line" | awk '{print $2}')
        current=$(echo "$line" | grep -oP 'upgradable from: \K[^\]]+' || echo "inconnue")
        echo -e "  ${CYAN}${name}${RESET} : ${YELLOW}${current}${RESET} → ${GREEN}${available}${RESET}"
    done <<< "$upgradable"
    echo ""

    read -p "Appliquer la mise à jour de ces ${count} paquet(s) ? [y/n] : " confirm
    case "$confirm" in
        [yY]*) ;;
        *) echo -e "${YELLOW}Annulé.${RESET}"; exit 0 ;;
    esac
    echo ""
    echo -e "${BOLD}--- Application de apt full-upgrade ---${RESET}"
fi

# Appliquer
DEBIAN_FRONTEND=noninteractive apt-get full-upgrade -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" 2>&1

# Vérifier reboot requis
reboot_required=false
if [ -f /var/run/reboot-required ]; then
    reboot_required=true
fi

if $INTERACTIVE; then
    echo ""
    echo -e "${GREEN}✅ Mise à jour terminée.${RESET}"
    if $reboot_required; then
        echo -e "${RED}⚠️  Redémarrage requis.${RESET}"
    fi
else
    printf '{"status":"upgraded","upgraded":%d,"reboot_required":%s}\n' \
        "$count" "$reboot_required"
fi
