#! /bin/bash

help() {
	echo "Check mp3 files for errors/warnings using ffprobe."
	echo "Files not ending in .mp3 will be skipped."
	echo ""
	echo "`color 2 Usage:` mp3check [options] <file|directory>"
	echo ""
	echo "`color 2 Options:`"
  echo "    `color 3 -h, --help`     Show this help text"
  echo "    `color 3 -v, --verbose`  Verbose logging"
	echo ""
}

# no args
if [[ "$#" < 1 ]]; then help; exit 0; fi

# proactively check for args
for ARG in "$@"; do
  if [[ "$ARG" == "-v" || "$ARG" == "--v" ]]; then
    VERBOSE=true
  elif [[ "$ARG" == "-h" || "$ARG" == "--help" ]]; then
    help; exit 0
  else
    PATH_ARG="$ARG"
  fi
done

# no file/dir provided
if [[ "$PATH_ARG" == "" ]]; then
	help; exit 0
fi

if [[ -d "$1" ]]; then # is directory
	echo "Scanning files in directory $1"
	echo ""
  CHECKED=1
  SKIPPED=0

	for FILE in "$1"/*; do
		if [[ $FILE == *.mp3 ]]
		then
			echo "`color 2 Checking` $FILE"
			ffprobe "${FILE}" -loglevel warning 2>&1
      CHECKED=$((CHECKED+1))
		else
			if [[ $VERBOSE == true ]]; then
				echo "`color 3 Skipping` $FILE"
			fi
      SKIPPED=$((CHECKED+1))
		fi
	done
  echo ""
  echo "Checked ${CHECKED} files"
  echo "Skipped ${SKIPPED} files"
elif [[ -f "$1" ]]; then # is file
	FILE="$1"
	if [[ $FILE == *.mp3 ]]; then
		echo "`color 6 Checking` $FILE"
		ffprobe "${FILE}" -loglevel warning 2>&1
	else
		echo "`color 1 Unsupported file extension:` $FILE"
	fi
else
	echo "`color 1 Argument is not a file or directory:` $1"
	exit 1
fi
