#!/usr/bin/env bash
set -euo pipefail

usage() {
  cat <<'EOF'
Usage:
  ./yt-audio-downloader.sh "https://www.youtube.com/watch?v=..."

Options:
  -o, --out DIR        Output directory (default: downloads)
  -q, --quality N      MP3 quality (default: 0, best)
  -f, --format F       Audio format (default: mp3)
  --playlist           Allow playlist download (default: disabled)
  --no-metadata        Do not embed metadata
  --no-thumbnail       Do not write thumbnail
  -h, --help           Show this help
EOF
}

OUT_DIR="downloads"
QUALITY="0"
AUDIO_FORMAT="mp3"
ALLOW_PLAYLIST="false"
EMBED_METADATA="true"
WRITE_THUMBNAIL="true"
URL=""

while [[ $# -gt 0 ]]; do
  case "$1" in
    -o|--out)
      OUT_DIR="${2:-}"
      shift 2
      ;;
    -q|--quality)
      QUALITY="${2:-}"
      shift 2
      ;;
    -f|--format)
      AUDIO_FORMAT="${2:-}"
      shift 2
      ;;
    --playlist)
      ALLOW_PLAYLIST="true"
      shift
      ;;
    --no-metadata)
      EMBED_METADATA="false"
      shift
      ;;
    --no-thumbnail)
      WRITE_THUMBNAIL="false"
      shift
      ;;
    -h|--help)
      usage
      exit 0
      ;;
    *)
      URL="${1:-}"
      shift
      ;;
  esac
done

if [[ -z "${URL}" ]]; then
  echo "Error: YouTube URL is missing."
  usage
  exit 1
fi

mkdir -p "${OUT_DIR}"

missing=()
command -v yt-dlp >/dev/null 2>&1 || missing+=("yt-dlp")
command -v ffmpeg >/dev/null 2>&1 || missing+=("ffmpeg")

if (( ${#missing[@]} > 0 )); then
  echo "Missing dependencies: ${missing[*]}"
  echo "Install with Homebrew:"
  echo "  brew install yt-dlp ffmpeg"
  exit 1
fi

YTDLP_OPTS=(
  --extract-audio
  --audio-format "${AUDIO_FORMAT}"
  --audio-quality "${QUALITY}"
  --output "${OUT_DIR}/%(title)s.%(ext)s"
  --restrict-filenames
  --newline
  --no-part
)

if [[ "${ALLOW_PLAYLIST}" == "false" ]]; then
  YTDLP_OPTS+=(--no-playlist)
fi

if [[ "${EMBED_METADATA}" == "true" ]]; then
  YTDLP_OPTS+=(--embed-metadata)
fi

if [[ "${WRITE_THUMBNAIL}" == "true" ]]; then
  YTDLP_OPTS+=(--write-thumbnail --convert-thumbnails jpg --embed-thumbnail)
fi

yt-dlp "${URL}" "${YTDLP_OPTS[@]}"
