#!/usr/bin/env bash
# =====================================================================
# GrosTony Multitools - export-rights.sh
# =====================================================================
# Exporte la liste des fichiers et dossiers contenus dans un répertoire
# (à profondeur 1 maximum) avec leurs propriétaires et droits, dans un
# format compatible avec l'outil "Comparateur de dossiers" du site.
#
# Usage :
#   ./export-rights.sh                   # mode interactif (demande le dossier)
#   ./export-rights.sh /home/dossier1    # avec argument
#   ./export-rights.sh /chemin > rapport.txt   # redirige vers fichier
#
# Compatible : Debian, Ubuntu, Mint, et toute distribution avec
# bash + GNU find (la grande majorité des distros Linux).
# =====================================================================

set -eu

# ---- Détermination du dossier cible -------------------------------------
if [[ $# -ge 1 ]]; then
    TARGET="$1"
else
    # Mode interactif : on lit depuis le terminal pour ne pas casser les
    # redirections de stdout vers un fichier
    if [[ -t 0 ]]; then
        read -r -p "Dossier à analyser : " TARGET
    else
        echo "Erreur : aucun argument et stdin n'est pas un terminal." >&2
        echo "Usage : $0 [/chemin/vers/dossier]" >&2
        exit 1
    fi
fi

# ---- Validation ---------------------------------------------------------
if [[ -z "$TARGET" ]]; then
    echo "Erreur : aucun dossier spécifié." >&2
    exit 1
fi

if [[ ! -d "$TARGET" ]]; then
    echo "Erreur : '$TARGET' n'est pas un dossier valide." >&2
    exit 1
fi

# Résolution du chemin absolu (utile pour le rapport)
TARGET_ABS="$(cd "$TARGET" && pwd)"

# ---- En-tête traçable ---------------------------------------------------
# Les lignes commençant par # sont ignorées par le parseur du site.
# Elles servent uniquement à la traçabilité humaine.
{
    echo "# GrosTony rights export v1"
    echo "# folder: $TARGET_ABS"
    echo "# host:   $(hostname)"
    echo "# date:   $(date -Iseconds 2>/dev/null || date)"
    echo "# format: type<TAB>name<TAB>owner<TAB>group<TAB>perms_octal<TAB>perms_symbolic"
}

# ---- Liste des entrées --------------------------------------------------
# %y = type (d=dossier, f=fichier, l=lien symbolique, c/b/p/s/u=spéciaux)
# %f = nom de base (filename)
# %u = nom du propriétaire
# %g = nom du groupe
# %m = permissions en octal (ex: 750)
# %M = permissions en symbolique (ex: drwxr-x---)
#
# -mindepth 1 : exclure le dossier cible lui-même
# -maxdepth 1 : ne pas descendre dans les sous-dossiers
# tri final pour avoir un ordre déterministe (facilite la comparaison)
find "$TARGET_ABS" -mindepth 1 -maxdepth 1 -printf '%y\t%f\t%u\t%g\t%m\t%M\n' 2>/dev/null | sort
