#!/usr/bin/env bash
#
# exporter-dconf.sh
#
# Exporte une sélection de paramètres dconf de Cinnamon
# dans une archive transférable vers un autre utilisateur.
#

set -Eeuo pipefail
umask 077

# Ne pas exécuter en root.
if [[ ${EUID} -eq 0 ]]; then
    echo "ERREUR : exécute ce script depuis le compte utilisateur source."
    exit 1
fi

# Vérification des dépendances.
for cmd in dconf tar date mktemp; do
    if ! command -v "$cmd" >/dev/null 2>&1; then
        echo "ERREUR : commande manquante : $cmd"
        exit 1
    fi
done

# Répertoire de destination.
OUTDIR="${HOME}/exports-dconf"
mkdir -p -- "$OUTDIR"
chmod 700 "$OUTDIR"

# Horodatage à la seconde, avec suffixe si nécessaire.
STAMP="$(date '+%Y%m%d_%H%M%S')"
BASE="dconf-cinnamon-${STAMP}"
ARCHIVE="${OUTDIR}/${BASE}.tar.gz"

n=1
while [[ -e "$ARCHIVE" ]]; do
    ARCHIVE="${OUTDIR}/${BASE}_${n}.tar.gz"
    ((n += 1))
done

# Répertoire temporaire.
WORKDIR="$(mktemp -d)"
trap 'rm -rf -- "$WORKDIR"' EXIT

mkdir -p "$WORKDIR/dconf"

# Branches à exporter.
BRANCHES=(
    "org/cinnamon"
    "org/nemo"
    "org/gtk"
    "org/gnome"
)

echo "Export des paramètres dconf..."

for branch in "${BRANCHES[@]}"; do
    filename="${branch//\//_}.dconf"
    target="${WORKDIR}/dconf/${filename}"

    echo "  -> /${branch}/"

    if ! dconf dump "/${branch}/" > "$target"; then
        echo "ERREUR : impossible d'exporter /${branch}/"
        exit 1
    fi
done

# Manifeste décrivant le contenu.
cat > "${WORKDIR}/MANIFEST.txt" <<EOF
Archive de configuration dconf pour Cinnamon / LMDE
Date d'export : $(date --iso-8601=seconds)
Utilisateur source : ${USER}
Machine source : $(hostname)
Branches exportées :
  /org/cinnamon/
  /org/nemo/
  /org/gtk/
  /org/gnome/

Format : texte dconf exporté avec dconf dump.
Restauration : utiliser le script importer-dconf.sh.
EOF

# Création de l'archive.
tar -czf "$ARCHIVE" -C "$WORKDIR" MANIFEST.txt dconf

chmod 600 "$ARCHIVE"

echo
echo "Export terminé."
echo "Archive : $ARCHIVE"
echo
echo "Contenu :"
tar -tzf "$ARCHIVE"

echo
echo "Transfère cette archive par SFTP vers le compte destinataire."

