#!/usr/bin/env bash
# Piccoli Programmatori: prepara un computer del corso.
#
# Da lanciare su Ubuntu (o Xubuntu, Lubuntu) appena installato, collegato a
# Internet, con un utente amministratore:
#
#   sudo bash prepara-computer.sh PC-01            installa e configura
#   sudo bash prepara-computer.sh PC-01 --filtro   ... e attiva il filtro famiglia sul DNS
#   sudo bash prepara-computer.sh PC-01 --azzera   cancella e ricrea l'utente «studente»
#
# Si può lanciare più volte: rifà solo quello che manca.
# Spiegazioni in computer-donati.md.

set -euo pipefail

NOME="${1:-}"
OPZIONE="${2:-}"
UTENTE="studente"

if [ "$(id -u)" -ne 0 ]; then
  echo "Lancia lo script con sudo:  sudo bash $0 PC-01"; exit 1
fi
if [ -z "$NOME" ] || [[ "$NOME" == --* ]]; then
  echo "Scrivi il numero del computer:  sudo bash $0 PC-01"; exit 1
fi

passo() { echo; echo "==> $*"; }

crea_utente() {
  if ! id "$UTENTE" >/dev/null 2>&1; then
    adduser --disabled-password --gecos "Studente" "$UTENTE"
    passwd -d "$UTENTE"            # nessuna password per entrare
  fi
  usermod -aG dialout,plugdev "$UTENTE"   # micro:bit via cavo (Thonny)
}

if [ "$OPZIONE" = "--azzera" ]; then
  passo "Cancello e ricreo l'utente $UTENTE (i file salvati sul computer si perdono)"
  if id "$UTENTE" >/dev/null 2>&1; then
    pkill -u "$UTENTE" || true
    deluser --remove-home "$UTENTE"
  fi
  crea_utente
  echo "Fatto."; exit 0
fi

passo "1/6 Nome del computer: $NOME"
hostnamectl set-hostname "$(echo "$NOME" | tr '[:upper:]' '[:lower:]')"

passo "2/6 Aggiornamenti (può volerci un po')"
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get -y full-upgrade

passo "3/6 Programmi del corso"
# Thonny: Python e MicroPython per la micro:bit · GCompris e Tux Paint: per i più piccoli
apt-get -y install language-pack-it thonny gcompris-qt tuxpaint flatpak
# Chromium: serve per collegare la micro:bit dal browser (MakeCode, python.microbit.org)
snap install chromium
snap connect chromium:raw-usb || true
# TurboWarp: Scratch 3 anche senza Internet
flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
flatpak install -y --noninteractive flathub org.turbowarp.TurboWarp

passo "4/6 micro:bit"
cat > /etc/udev/rules.d/50-microbit.rules <<'REGOLA'
# BBC micro:bit: permette al browser e a Thonny di parlare con la scheda
SUBSYSTEM=="usb", ATTR{idVendor}=="0d28", MODE="0666"
REGOLA
udevadm control --reload-rules
udevadm trigger

passo "5/6 Collegamenti ai siti del corso"
collegamento() {   # nome file, titolo, indirizzo
  cat > "/usr/share/applications/$1.desktop" <<VOCE
[Desktop Entry]
Type=Application
Name=$2
Exec=chromium $3
Icon=chromium
Categories=Education;
VOCE
}
collegamento pp-scratch      "Scratch (online)"     https://scratch.mit.edu/projects/editor/
collegamento pp-makecode     "MakeCode micro:bit"   https://makecode.microbit.org/
collegamento pp-microbit-py  "Python micro:bit"     https://python.microbit.org/
collegamento pp-futuro       "Programma il Futuro"  https://programmailfuturo.it/
collegamento pp-blockly      "Blockly Games"        https://blockly.games/?lang=it

passo "6/6 Utente $UTENTE, con accesso automatico"
crea_utente
if [ -d /etc/gdm3 ]; then                     # Ubuntu
  sed -i '/^AutomaticLogin/d' /etc/gdm3/custom.conf
  sed -i "s/^\[daemon\]/[daemon]\nAutomaticLoginEnable=true\nAutomaticLogin=$UTENTE/" /etc/gdm3/custom.conf
elif [ -d /etc/lightdm ]; then                # Xubuntu
  mkdir -p /etc/lightdm/lightdm.conf.d
  printf '[Seat:*]\nautologin-user=%s\n' "$UTENTE" > /etc/lightdm/lightdm.conf.d/50-piccoli-programmatori.conf
else                                          # Lubuntu e altri
  echo "Accesso automatico: impostalo a mano dalle impostazioni (utente $UTENTE)."
fi

if [ "$OPZIONE" = "--filtro" ]; then
  passo "Filtro famiglia: Cloudflare for Families (blocca siti per adulti e pericolosi)"
  mkdir -p /etc/systemd/resolved.conf.d
  printf '[Resolve]\nDNS=1.1.1.3 1.0.0.3\nDomains=~.\n' > /etc/systemd/resolved.conf.d/piccoli-programmatori.conf
  systemctl restart systemd-resolved
fi

echo
echo "Fatto! Riavvia il computer, poi fai la prova finale della scheda del computer."
