#!/bin/bash

# ==============================================================================
# Script: Autodesk Total Purge - Full Spectrum (Double Pass + Unmount)
# Incluye rutas de AutoCAD, Licenciamiento Nuevo y Cachés Ocultas.
# ==============================================================================

if [[ $EUID -ne 0 ]]; then
   echo "Este script debe ejecutarse como root (sudo)"
   exit 1
fi

LOG_FILE="/var/log/autodesk_purge_total.log"
echo "--- Iniciando purga total de Autodesk/AutoCAD: $(date) ---" > "$LOG_FILE"

# --- 1. FUNCIÓN PARA DESMONTAR UNIDADES EXTERNAS ---
unmount_external_drives() {
    echo ">> Verificando unidades externas..."
    EXTERNAL_VOLUMES=$(ls /Volumes | grep -v "Macintosh HD")

    if [ -n "$EXTERNAL_VOLUMES" ]; then
        echo "   > Unidades externas detectadas. Desmontando..."
        while read -r volume; do
            echo "     - Expulsando: /Volumes/$volume"
            diskutil unmountDisk "/Volumes/$volume" >> "$LOG_FILE" 2>&1
        done <<< "$EXTERNAL_VOLUMES"
    fi
}

# --- 2. LISTA DE OBJETIVOS AMPLIADA (TARGETS) ---
TARGETS=(
    # --- Archivos de Usuario ---
    "$HOME/Adlm"
    "$HOME/Library/Application Support/Autodesk"
    "$HOME/Library/Application Support/com.autodesk.AutoCAD"*
    "$HOME/Library/Caches/com.autodesk."*
    "$HOME/Library/Caches/Autodesk"*
    "$HOME/Library/Logs/Autodesk"*
    "$HOME/Library/Preferences/com.autodesk."*
    
    # --- Archivos del Sistema y Licenciamiento ---
    "/Library/Autodesk"
    "/Library/Application Support/Autodesk"
    "/Library/Application Support/FLEXnet Publisher"
    "/Library/Frameworks/Adlm.framework"
    "/Library/Caches/com.autodesk."*
    
    # --- LaunchAgents y Daemons (Versiones Antiguas y Nuevas) ---
    "/Library/LaunchAgents/com.autodesk."*
    "/Library/LaunchDaemons/com.autodesk."*
    "/Library/PrivilegedHelperTools/com.autodesk."*
    
    # --- Preferencias Globales ---
    "/Library/Preferences/com.autodesk."*
    "/Library/Preferences/.com.flexnetlicensing"
    "/Library/Preferences/Flexnet Publisher"
    
    # --- Aplicaciones ---
    "/Applications/Autodesk"
    "/Applications/AutoCAD"*
)

# --- 3. FUNCIÓN DE LIMPIEZA ---
perform_cleanup() {
    echo ">> Iniciando pasada de limpieza..."
    
    # Cerrar procesos (Añadidos LicensingAgent y AdskLicensing)
    pkill -9 -i "Autodesk" >> "$LOG_FILE" 2>&1
    pkill -9 -i "Adlm" >> "$LOG_FILE" 2>&1
    pkill -9 -i "FLEXnet" >> "$LOG_FILE" 2>&1
    pkill -9 -i "AdskLicensing" >> "$LOG_FILE" 2>&1
    pkill -9 -i "AutoCAD" >> "$LOG_FILE" 2>&1
    
    # Descargar servicios activos
    for plist in /Library/LaunchDaemons/com.autodesk.* /Library/LaunchAgents/com.autodesk.*; do
        if [ -f "$plist" ]; then
            launchctl unload "$plist" >> "$LOG_FILE" 2>&1
            launchctl bootout system "$plist" >> "$LOG_FILE" 2>&1 
        fi
    done
    
    sleep 2
    
    # Borrar targets con expansión de comodines
    for path in "${TARGETS[@]}"; do
        # El uso de 'rm -rf' con la ruta expandida por el shell
        if ls $path >/dev/null 2>&1; then
            echo "     - Eliminando rastro: $path" >> "$LOG_FILE"
            rm -rf $path >> "$LOG_FILE" 2>&1
        fi
    done
}

# ==============================================================================
# EJECUCIÓN
# ==============================================================================

unmount_external_drives
echo ">> PASADA 1..."
perform_cleanup
echo ">> PASADA 2 (Verificación)..."
perform_cleanup

# Refrescar LaunchServices para limpiar iconos fantasma
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user
killall Finder

echo "--------------------------------------------------"
echo "PURGA TOTAL DE AUTODESK COMPLETADA."
echo "Log: $LOG_FILE"
echo "IMPORTANTE: Reinicia ahora mismo."
echo "--------------------------------------------------"