#!/bin/bash

# ============================================================
# Téléchargement de fichiers PDF/MP3 depuis une liste de répertoires
# Tous les fichiers sont enregistrés à plat dans le dossier destination
# Usage: ./download_files.sh -l liste_repertoires.txt -o /chemin/destination
# ============================================================

set -euo pipefail

# --- Paramètres par défaut ---
EXTENSIONS="pdf mp3"
OUTPUT_DIR="./downloads"
URL_LIST_FILE=""
DRY_RUN=false
LOG_FILE=""

# --- Aide ---
usage() {
  echo "Usage: $0 -l <fichier_liste> -o <dossier_destination> [options]"
  echo ""
  echo "  -l  Fichier contenant la liste des URLs de répertoires (une par ligne)"
  echo "  -o  Dossier de destination pour les fichiers téléchargés"
  echo "  -e  Extensions à télécharger, séparées par des virgules (défaut: pdf,mp3)"
  echo "  -f  Fichier de log (défaut: download_YYYYMMDD_HHMMSS.log dans la destination)"
  echo "  -d  Dry-run : affiche ce qui serait téléchargé sans télécharger"
  echo ""
  echo "Exemple:"
  echo "  $0 -l repertoires.txt -o /opt/backup-docker/aps -e pdf,mp3"
  exit 1
}

# --- Lecture des arguments ---
while getopts "l:o:e:f:dh" opt; do
  case $opt in
    l) URL_LIST_FILE="$OPTARG" ;;
    o) OUTPUT_DIR="$OPTARG" ;;
    e) EXTENSIONS="${OPTARG//,/ }" ;;
    f) LOG_FILE="$OPTARG" ;;
    d) DRY_RUN=true ;;
    h) usage ;;
    *) usage ;;
  esac
done

# --- Vérifications ---
if [[ -z "$URL_LIST_FILE" ]]; then
  echo "❌ Erreur : fichier de liste requis (-l)"
  usage
fi

if [[ ! -f "$URL_LIST_FILE" ]]; then
  echo "❌ Erreur : fichier '$URL_LIST_FILE' introuvable"
  exit 1
fi

if ! command -v wget &>/dev/null; then
  echo "❌ Erreur : wget n'est pas installé"
  exit 1
fi

# --- Création du dossier destination ---
mkdir -p "$OUTPUT_DIR"

# --- Initialisation du fichier log ---
if [[ -z "$LOG_FILE" ]]; then
  LOG_FILE="$OUTPUT_DIR/download_$(date '+%Y%m%d_%H%M%S').log"
fi
exec > >(tee -a "$LOG_FILE") 2>&1
echo "Log enregistré dans : $LOG_FILE"

# --- Construction du filtre d'extensions ---
ACCEPT_LIST=""
for ext in $EXTENSIONS; do
  ACCEPT_LIST="${ACCEPT_LIST}*.${ext},"
done
ACCEPT_LIST="${ACCEPT_LIST%,}"  # supprime la virgule finale

echo "=================================================="
echo "  Téléchargement de fichiers"
echo "  Extensions : $ACCEPT_LIST"
echo "  Destination : $OUTPUT_DIR"
echo "  Liste : $URL_LIST_FILE"
echo "  Dry-run : $DRY_RUN"
echo "=================================================="

# --- Lecture de la liste et téléchargement ---
TOTAL=0
SUCCESS=0
FAIL=0

while IFS= read -r url || [[ -n "$url" ]]; do
  # Ignorer les lignes vides et commentaires
  [[ -z "$url" || "$url" == \#* ]] && continue

  # Nettoyer l'URL
  url=$(echo "$url" | tr -d '[:space:]')

  echo ""
  echo "📁 Traitement : $url"

  TOTAL=$((TOTAL + 1))

  if [[ "$DRY_RUN" == true ]]; then
    echo "  [dry-run] wget --spider --recursive --no-parent --accept '$ACCEPT_LIST' '$url'"
    SUCCESS=$((SUCCESS + 1))
    continue
  fi

  # --no-directories (-nd) : tous les fichiers dans un seul dossier plat
  if wget \
    --recursive \
    --no-parent \
    --no-directories \
    --accept "$ACCEPT_LIST" \
    --directory-prefix "$OUTPUT_DIR" \
    --no-verbose \
    --show-progress \
    --timeout=30 \
    --tries=3 \
    "$url" 2>&1; then
    echo "✅ OK : $url"
    SUCCESS=$((SUCCESS + 1))
  else
    echo "⚠️  Échec ou aucun fichier trouvé : $url"
    FAIL=$((FAIL + 1))
  fi

done < "$URL_LIST_FILE"

echo ""
echo "=================================================="
echo "  Résumé"
echo "  Total répertoires traités : $TOTAL"
echo "  Succès : $SUCCESS"
echo "  Échecs : $FAIL"
echo "=================================================="