#!/bin/bash
set -euo pipefail

# --- Configuration par défaut ---
RCLONE_CONFIG="/opt/rclone/config/rclone.conf"
RCLONE_BIN="/usr/bin/rclone"
LOG_OPTS=(--syslog)
DRY_RUN=false
LOG_FILE=""
DEBUG=false
TRACE=false
LOG_LEVEL="INFO"

# --- Liste des transferts ---
declare -A RCLONE_TASKS=(
    ["dropbox:/paperless/"]="/media/inbox/dropbox/"
    ["dropbox:/ScannerPro/"]="/media/inbox/ScannerPro/"
)

# --- Fonctions ---
usage() {
    cat <<EOF
Usage: $0 [OPTIONS]

Options :
  -n, --dry-run              Simule les transferts sans réellement déplacer les fichiers
  -l, --log-file FILE        Écrit aussi les logs dans un fichier local
  -d, --debug                Active les logs Rclone détaillés et affiche les variables d’environnement
  -t, --trace                Active le mode trace (set -x) pour afficher les commandes exécutées
  -v, --log-level LEVEL      Définit le niveau de log Rclone (default: INFO)
  -h, --help                 Affiche cette aide

Niveaux de log valides pour Rclone :
  DEBUG, INFO, NOTICE, ERROR, FATAL, PANIC

Exemples :
  $0                             Transfert réel
  $0 -n                          Simulation
  $0 -l /var/log/rclone.log      Ajoute un log local
  $0 -d -t                       Active debug et trace
  $0 -v DEBUG                    Log Rclone en mode debug
EOF
    exit 0
}

debug_log() {
    if [[ "$DEBUG" == true ]]; then
        echo "[DEBUG] $*"
    fi
}

# --- Parsing des arguments ---
while [[ $# -gt 0 ]]; do
    case "$1" in
        -n|--dry-run)
            DRY_RUN=true
            shift
            ;;
        -l|--log-file)
            LOG_FILE="$2"
            shift 2
            ;;
        -d|--debug)
            DEBUG=true
            shift
            ;;
        -t|--trace)
            TRACE=true
            shift
            ;;
        -v|--log-level)
            LOG_LEVEL=$(echo "$2" | tr '[:lower:]' '[:upper:]')
            shift 2
            ;;
        -h|--help)
            usage
            ;;
        *)
            echo "❌ Option inconnue : $1"
            usage
            ;;
    esac
done

# --- Mode trace si demandé ---
[[ "$TRACE" == true ]] && set -x

# --- Préparation des options ---
LOG_OPTS+=("--log-level=$LOG_LEVEL")
[[ "$DRY_RUN" == true ]] && LOG_OPTS+=("--dry-run")
[[ -n "$LOG_FILE" ]] && LOG_OPTS+=("--log-file=$LOG_FILE")
[[ "$DEBUG" == true ]] && LOG_OPTS+=("-vv")

# --- Debug Info ---
debug_log "RCLONE_CONFIG=$RCLONE_CONFIG"
debug_log "RCLONE_BIN=$RCLONE_BIN"
debug_log "DRY_RUN=$DRY_RUN"
debug_log "LOG_FILE=$LOG_FILE"
debug_log "LOG_LEVEL=$LOG_LEVEL"
debug_log "LOG_OPTS=${LOG_OPTS[*]}"

# --- Exécution des transferts ---
for SRC in "${!RCLONE_TASKS[@]}"; do
    DST="${RCLONE_TASKS[$SRC]}"
    echo "🔁 Moving from $SRC to $DST"
    "$RCLONE_BIN" "${LOG_OPTS[@]}" --config "$RCLONE_CONFIG" move "$SRC" "$DST"
done
