#!/bin/bash
# =============================================================================
# desinstalar.sh — remove o PPCI Maratona de um PC do laboratório.
#
# Uso (no PC do lab, com a VM FECHADA):
#   curl -fsSL https://maratona.td.utfpr.edu.br/ppci-linux-lite/desinstalar.sh | sudo bash
#
# Reverte o que o setup.sh/install.sh (e o setup-kiosk.sh) instalaram:
#   - /opt/ppci (lançador, app, ícone, imagem disco.qcow2 + overlay + .version)
#   - /etc/ppci-launcher.conf
#   - atalho "PPCI Maratona" (menu de aplicativos + Área de Trabalho)
#   - sessão kiosk (openbox, xsession, regra de VT)
#   - remove o usuário do grupo 'ppci'
#
# PRESERVA por padrão:
#   - a pasta de código /PPCI_codigos (trabalho dos alunos) -> wipe com PPCI_UNINSTALL_CODIGO=1
#   - pacotes do sistema (qemu, zenity, jq, openbox, xorg) — compartilhados, NÃO remove
#
# Idempotente. Pula a confirmação com PPCI_UNINSTALL_YES=1.
# =============================================================================
set -euo pipefail

SERVER="https://maratona.td.utfpr.edu.br"
PPCI_DIR="${PPCI_DIR:-/opt/ppci}"
CODIGO_BASE="${CODIGO_BASE:-/PPCI_codigos}"
CONF="/etc/ppci-launcher.conf"

RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; BLUE='\033[0;34m'; NC='\033[0m'
log(){  echo -e "${BLUE}[*]${NC} $*"; }
ok(){   echo -e "${GREEN}[+]${NC} $*"; }
warn(){ echo -e "${YELLOW}[!]${NC} $*"; }
err(){  echo -e "${RED}[x]${NC} $*" >&2; }

if [[ $EUID -ne 0 ]]; then
    err "rode como root:"
    err "  curl -fsSL $SERVER/ppci-linux-lite/desinstalar.sh | sudo bash"
    exit 1
fi

# A VM tem que estar fechada (senão /opt/ppci segue em uso).
if pgrep -x qemu-system-x86_64 >/dev/null 2>&1; then
    err "a VM está ABERTA. Feche a janela da VM e rode de novo."
    exit 1
fi

LAB_USER="${SUDO_USER:-$(logname 2>/dev/null || echo '')}"
USER_HOME=""
[[ -n "$LAB_USER" ]] && USER_HOME="$(getent passwd "$LAB_USER" | cut -d: -f6)"

# Confirmação (lê do terminal mesmo via 'curl | sudo bash'). Pula com PPCI_UNINSTALL_YES=1.
if [[ "${PPCI_UNINSTALL_YES:-0}" != "1" ]]; then
    warn "isto vai REMOVER o PPCI Maratona deste PC (lançador, app, imagem ~13,7GB, kiosk)."
    [[ "${PPCI_UNINSTALL_CODIGO:-0}" == "1" ]] && warn "PPCI_UNINSTALL_CODIGO=1 → também vai APAGAR os códigos em $CODIGO_BASE"
    if [[ -e /dev/tty ]]; then
        printf 'Digite DESINSTALAR para confirmar: ' > /dev/tty
        read -r resp < /dev/tty || resp=""
        [[ "$resp" == "DESINSTALAR" ]] || { err "cancelado."; exit 1; }
    else
        err "sem terminal pra confirmar — reexecute com PPCI_UNINSTALL_YES=1."
        exit 1
    fi
fi

# --- 1. Atalhos de aplicativo (menu + Área de Trabalho) ----------------------
rm -f /usr/share/applications/ppci-maratona.desktop
if [[ -n "$USER_HOME" ]]; then
    for DESK in "$USER_HOME/Área de Trabalho" "$USER_HOME/Desktop" "$USER_HOME/Área de trabalho"; do
        rm -f "$DESK/ppci-maratona.desktop"
    done
fi
ok "atalhos 'PPCI Maratona' removidos"

# --- 2. Sessão kiosk (setup-kiosk.sh) ----------------------------------------
rm -f /usr/share/xsessions/ppci-kiosk.desktop
rm -f /etc/X11/xorg.conf.d/10-ppci-novt.conf
if [[ -n "$USER_HOME" ]]; then
    rm -f "$USER_HOME/.config/openbox/autostart" "$USER_HOME/.config/openbox/rc.xml"
    rmdir "$USER_HOME/.config/openbox" 2>/dev/null || true
fi
ok "sessão kiosk removida (openbox/xsession/VT-lock)"

# --- 3. /opt/ppci (scripts, ícone, imagem, overlay, .version) ----------------
if [[ -d "$PPCI_DIR" ]]; then
    SZ="$(du -sh "$PPCI_DIR" 2>/dev/null | cut -f1 || true)"
    rm -rf "${PPCI_DIR:?}"
    ok "removido $PPCI_DIR (${SZ:-?} liberados, inclui a imagem)"
fi

# --- 4. Config ---------------------------------------------------------------
rm -f "$CONF"
ok "removido $CONF"

# --- 5. Grupo ppci (remove o usuário; preserva kvm) --------------------------
if [[ -n "$LAB_USER" ]] && id -nG "$LAB_USER" 2>/dev/null | tr ' ' '\n' | grep -qx ppci; then
    gpasswd -d "$LAB_USER" ppci >/dev/null 2>&1 || true
    ok "usuário '$LAB_USER' removido do grupo ppci (kvm preservado)"
fi
# só apaga o grupo se nada que ele possui sobrar (códigos preservados mantêm o grupo)
if [[ ! -d "$CODIGO_BASE" ]] && getent group ppci >/dev/null 2>&1; then
    groupdel ppci 2>/dev/null && ok "grupo ppci removido" || true
fi

# --- 6. Pasta de código (PRESERVADA por padrão) ------------------------------
if [[ "${PPCI_UNINSTALL_CODIGO:-0}" == "1" ]]; then
    if [[ -d "$CODIGO_BASE" ]]; then
        warn "PPCI_UNINSTALL_CODIGO=1 → apagando códigos em $CODIGO_BASE"
        rm -rf "${CODIGO_BASE:?}"
        ok "pasta de código apagada."
    fi
else
    [[ -d "$CODIGO_BASE" ]] && warn "preservado $CODIGO_BASE (código dos alunos). Wipe total: PPCI_UNINSTALL_CODIGO=1"
fi

echo
ok "PPCI Maratona DESINSTALADO deste PC."
log "pacotes do sistema (qemu, zenity, jq, openbox, xorg) foram MANTIDOS (compartilhados)."
[[ -f /etc/gdm3/custom.conf ]] && warn "se havia autologin na sessão 'PPCI Maratona (kiosk)', edite /etc/gdm3/custom.conf (AutomaticLoginSession) pra voltar à sessão normal."
log "relogue o usuário pra sair do grupo ppci."
