#!/bin/bash

shopt -s globstar

# Initialisation de la mise en forme
blue=$(tput setaf 4)
red=$(tput setaf 1)
green=$(tput setaf 2)
reset=$(tput sgr0)
bold=$(tput bold)

# Répertoire source
rootdir="$(realpath "${1:-${HOME}/Musique/}")"

cd "$rootdir"

# Pour tous les sous-répertoires, à tous les niveaux
for dir in **/ .
do
	# Vérifie que le répertoire existe, sinon on le saute.
	[[ -d "${rootdir}/${dir}" ]] || continue

	# On entre dans le répertoire à traiter
	cd "${rootdir}/${dir}"

	# Liste des fichiers à traiter
	unset todo
	declare -a todo
	
	# Pour chaque fichier
	for file in *
	do
		# On ignore les dossiers
		if [[ -d "${file}" ]]
		then
			continue
		fi

		# S’il s’agit d’audio
		if [[ "$file" =~ .mp3$ || "$file" =~ .m4a$ || "$(file --mime-type -b -e ascii -e compress -e tar -e cdf "$file")" =~ audio/ ]]
		then
			todo+=("$file")
		fi
	done

	# Si rien à faire, on saute.
	if [[ "${#todo}" -eq 0 ]]
	then
		echo "[${blue}SKIP${reset}] $dir"
		continue
	fi

	# Parrallélisation des traitements
	declare -a running

	running=($(jobs -p))
	if [[ "${#running[@]}" -ge 12 ]]
	then
		wait -n
	fi
	
	(
		# Affichage du répertoire en cours de traitement
		echo "       $dir$reset"

		# Traitement
		loudgain -S -a -k -q -s e "${todo[@]}" &>/dev/null && \
			echo "[${green} OK ${reset}] $dir" || \
			echo "[${red}FAIL${reset}] $dir"
	) &
done
wait
