#!/bin/bash

echo "IMPORTANTE: Esegui lo script stando DENTRO la cartella della classe (es. /home/classe-2a)"
BASE_DIR=$(pwd)

echo "Configurazione Ambiente Didattico"
echo "Percorso attuale: $BASE_DIR"

read -p "Vuoi proseguire? [s/N]: " scelta
[[ ! "$scelta" =~ ^[Ss]$ ]] && exit 0

# INPUT INTERATTIVO CON DEFAULT
read -p "Nome della cartella comune [00-Comune]: " COMUNE_NAME
COMUNE_NAME=${COMUNE_NAME:-00-Comune}
COMUNE_DIR="$BASE_DIR/$COMUNE_NAME"

read -p "Docente Coordinatore (Proprietario fisico) [root]: " OWNER
OWNER=${OWNER:-root}

read -p "Gruppo Amministratori (Ad es. docenti) [root]: " ADMIN_GROUP
ADMIN_GROUP=${ADMIN_GROUP:-root}

read -p "Gruppo della classe (Ad es. classe-2b): " GROUP
# Se il gruppo non viene inserito, lo script deve fermarsi
if [[ -z "$GROUP" ]]; then
    echo "Errore: Devi specificare il gruppo della classe!"; exit 1
fi

if ! getent group "$GROUP" >/dev/null 2>&1; then
    echo "Errore: Il gruppo classe '$GROUP' non esiste."; exit 1
fi

# CONFIGURAZIONE STRUTTURA E REGOLE

echo "Configurazione cartella radice e isolamento..."

# Radice (00-Comune)
mkdir -p "$COMUNE_DIR"
chown "$OWNER":"$GROUP" "$COMUNE_DIR"
chmod 3770 "$COMUNE_DIR"

# Pulizia ACL
setfacl -b "$COMUNE_DIR"

# Impostazione ACL di Accesso (Sdoppiate per sicurezza)
setfacl -m u:"$OWNER":rwX,m:rwX "$COMUNE_DIR"
#setfacl -m g:"$ADMIN_GROUP":rwX,m:rwX "$COMUNE_DIR"
setfacl -m g:"$GROUP":rwX,m:rwX "$COMUNE_DIR"

# ACL Default (per il futuro)
setfacl -d -m u:"$OWNER":rwX,g:"$ADMIN_GROUP":rwX,g::rwX,g:"$GROUP":rwX,m:rwX "$COMUNE_DIR"


# B. 01-Compiti (Docenti scrivono, Studenti leggono)
mkdir -p "$COMUNE_DIR/01-Compiti"
setfacl -b "$COMUNE_DIR/01-Compiti"
setfacl -m g:"$ADMIN_GROUP":rwX,g:"$GROUP":rX,m:rwX "$COMUNE_DIR/01-Compiti"
setfacl -d -m g:"$ADMIN_GROUP":rwX,g:"$GROUP":rX,m:rwX "$COMUNE_DIR/01-Compiti"

# C. 02-Buca-delle-Lettere (IL POZZO: Studenti scrivono 'al buio', Docenti tutto)
mkdir -p "$COMUNE_DIR/02-Buca-delle-Lettere"
chown "$OWNER":"$ADMIN_GROUP" "$COMUNE_DIR/02-Buca-delle-Lettere"
# 0770: Impedisce l'accesso agli estranei.
chmod 0770 "$COMUNE_DIR/02-Buca-delle-Lettere"
setfacl -b "$COMUNE_DIR/02-Buca-delle-Lettere"

# PERMESSI ACCESSO Buca-delle-Lettere
# Admin: rwX (Pieno controllo)
# Gruppo Classe: wx (SOLO SCRITTURA ed ESECUZIONE - Niente Lettura 'r')
setfacl -m g:"$ADMIN_GROUP":rwX,m:rwX "$COMUNE_DIR/02-Buca-delle-Lettere"
setfacl -m g:"$GROUP":wx,m:rwX "$COMUNE_DIR/02-Buca-delle-Lettere"
setfacl -m g:"$ADMIN_GROUP":rwX,g:"$GROUP":wx,m:rwX "$COMUNE_DIR/02-Buca-delle-Lettere"
# PERMESSI DEFAULT Buca-delle-Lettere (Per i file che verranno inseriti)
# Docenti vedono e modificano tutto, Studenti non vedono nulla (---)
setfacl -d -m u:"$OWNER":rwX,g:"$ADMIN_GROUP":rwX,g:"$GROUP":---,m:rwX "$COMUNE_DIR/02-Buca-delle-Lettere"


# FASE MANUTENZIONE IDEMPOTENTE
echo "Sincronizzazione poteri e manutenzione..."

find "$COMUNE_DIR" -mindepth 1 -exec setfacl -m m:rwX,u:"$OWNER":rwX,g:"$ADMIN_GROUP":rwX "{}" \;

# Bit speciali SGID per ereditarietà
find "$COMUNE_DIR" -mindepth 1 -type d ! -perm -2000 -exec chmod +s {} +


# CICLO ALUNNI
echo "Configurazione Home e Segnalibri..."

for STUDENT_FOLDER in "$BASE_DIR"/*; do
    [ -d "$STUDENT_FOLDER" ] || continue
    ABS_STUDENT_HOME=$(realpath "$STUDENT_FOLDER")
    [ "$ABS_STUDENT_HOME" == "$COMUNE_DIR" ] && continue

    USER_NAME=$(basename "$ABS_STUDENT_HOME")
    if ! id "$USER_NAME" >/dev/null 2>&1; then continue; fi
    PRIMARY_GROUP=$(id -gn "$USER_NAME")

    # GESTIONE LINK SIMBOLICO
    LINK_NAME="$ABS_STUDENT_HOME/$COMUNE_NAME"
    rm -rf "$LINK_NAME"
    ln -srf "$COMUNE_DIR" "$LINK_NAME"
    chown -h "$USER_NAME":"$PRIMARY_GROUP" "$LINK_NAME"

    # GESTIONE SEGNALIBRI
    BOOK_DIR="$ABS_STUDENT_HOME/.config/gtk-3.0"
    BOOK_FILE="$BOOK_DIR/bookmarks"
    EXPECTED_LINE="file://$LINK_NAME $COMUNE_NAME"

    mkdir -p "$BOOK_DIR"
    if [ -f "$BOOK_FILE" ]; then
        if ! grep -Fxq "$EXPECTED_LINE" "$BOOK_FILE"; then
            sed -i "/ $COMUNE_NAME$/d" "$BOOK_FILE"
            echo "$EXPECTED_LINE" >> "$BOOK_FILE"
        fi
    else
        echo "$EXPECTED_LINE" > "$BOOK_FILE"
    fi

    # RIPRISTINO PERMESSI
    chown -R "$USER_NAME":"$PRIMARY_GROUP" "$ABS_STUDENT_HOME/.config"
    echo "  - Configurato: $USER_NAME"
done

echo "--- PROCEDURA COMPLETATA CON SUCCESSO ---"

