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

usage() {
  cat <<'EOF'
Использование:
  ./yt-audio-downloader.sh "https://www.youtube.com/watch?v=..."

Опции:
  -o, --out DIR        Папка для сохранения (по умолчанию: downloads)
  -q, --quality N     Качество аудио для mp3 (по умолчанию: 0, лучшее)
  -f, --format F      Формат аудио (по умолчанию: mp3)
  --playlist           Разрешить скачивание плейлиста (по умолчанию выключено)
  --no-metadata        Не встраивать метаданные
  --no-thumbnail       Не скачивать обложку
  -h, --help           Показать эту справку

Заметка:
  По умолчанию конвертация в mp3 делается через yt-dlp (нужен ffmpeg).
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 1
      ;;
    --no-metadata)
      EMBED_METADATA="false"
      shift 1
      ;;
    --no-thumbnail)
      WRITE_THUMBNAIL="false"
      shift 1
      ;;
    -h|--help)
      usage
      exit 0
      ;;
    *)
      URL="${1:-}"
      shift 1
      ;;
  esac
done

if [[ -z "${URL}" ]]; then
  echo "Ошибка: не передана ссылка на видео YouTube."
  echo
  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 (нужен для конвертации в mp3)")

if (( ${#missing[@]} > 0 )); then
  echo "Не хватает зависимостей: ${missing[*]}"
  echo
  echo "macOS (пример):"
  echo "  brew install yt-dlp ffmpeg"
  echo
  echo "После установки запустите ещё раз:"
  echo "  ./yt-audio-downloader.sh \"${URL}\""
  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

echo "Скачиваю и конвертирую аудио..."
yt-dlp "${URL}" "${YTDLP_OPTS[@]}"

echo
echo "Готово. Файлы сохранены в: ${OUT_DIR}"

