#!/bin/bash
# =============================================================================
# resetar.sh — zera a VM da maratona num PC do laboratório.
#
# Uso (no PC do lab, com a VM FECHADA):
#   curl -fsSL https://maratona.td.utfpr.edu.br/ppci-linux-lite/resetar.sh | sudo bash
#
# Apaga o disco de SESSÃO persistente (/opt/ppci/sessao.qcow2). No próximo
# clique no ícone "PPCI Maratona", o launcher recria a VM do zero a partir da
# mestre — estado "de fábrica".
#
# NÃO mexe na pasta de código /PPCI_codigos (o trabalho salvo lá fica). Pra um
# wipe TOTAL (sessão + códigos), rode com PPCI_RESET_CODIGO=1.
# Idempotente: pode rodar de novo sem problema.
# =============================================================================
set -euo pipefail

SERVER="https://maratona.td.utfpr.edu.br"
PPCI_DIR="${PPCI_DIR:-/opt/ppci}"
SESSAO="$PPCI_DIR/sessao.qcow2"
CODIGO_BASE="${CODIGO_BASE:-/PPCI_codigos}"

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/resetar.sh | sudo bash"
    exit 1
fi

# A VM tem que estar fechada: com o QEMU aberto o arquivo segue em uso e o
# reset não tem efeito (o disco só some quando o processo solta o arquivo).
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

WIPED=0

if [[ -f "$SESSAO" ]]; then
    SZ="$(du -h "$SESSAO" 2>/dev/null | cut -f1 || true)"
    warn "vai APAGAR a sessão salva da VM: $SESSAO (${SZ:-?})"
    warn "todo o estado da VM volta ao de fábrica."
    # Confirmação (lê do terminal mesmo via 'curl | sudo bash'). Pula com PPCI_RESET_YES=1.
    if [[ "${PPCI_RESET_YES:-0}" != "1" ]]; then
        if [[ -e /dev/tty ]]; then
            printf 'Digite RESETAR para confirmar: ' > /dev/tty
            read -r resp < /dev/tty || resp=""
            [[ "$resp" == "RESETAR" ]] || { err "cancelado."; exit 1; }
        else
            err "sem terminal pra confirmar — reexecute com PPCI_RESET_YES=1."
            exit 1
        fi
    fi
    rm -f "$SESSAO"
    ok "VM zerada — no próximo clique no ícone ela volta ao estado de fábrica."
    WIPED=1
else
    ok "a VM já está no estado de fábrica (sem sessão salva)."
fi

# Opcional: wipe total — apaga também os códigos salvos no host.
if [[ "${PPCI_RESET_CODIGO:-0}" == "1" ]]; then
    if [[ -d "$CODIGO_BASE" ]]; then
        warn "PPCI_RESET_CODIGO=1 → apagando códigos em $CODIGO_BASE"
        rm -rf "${CODIGO_BASE:?}"
        mkdir -p "$CODIGO_BASE"
        chgrp ppci "$CODIGO_BASE" 2>/dev/null || true
        chmod 2775 "$CODIGO_BASE" 2>/dev/null || true
        ok "pasta de código limpa."
        WIPED=1
    fi
else
    [[ -d "$CODIGO_BASE" ]] && \
        log "pasta de código preservada ($CODIGO_BASE). Pra apagar também: PPCI_RESET_CODIGO=1."
fi

[[ "$WIPED" == "1" ]] && log "pronto."
exit 0
