#!/usr/bin/env bash
# SOURCE: https://gist.github.com/Synertry/

SUBS_ARGS=(--cookies "/mnt/d/Videos/Archive/youtube.com_cookies.txt" \
	--no-progress \
	--ignore-errors --retries infinite --fragment-retries infinite --file-access-retries infinite --extractor-retries 50 \
	--sub-langs all --write-subs --convert-subs none \
	--no-playlist --no-write-playlist-metafiles --playlist-reverse \
	--no-download-archive --skip-download --no-embed-info-json --no-write-thumbnail --no-write-info-json --no-write-description --no-overwrites \
	--paths "/mnt/d/Videos/Archive" --paths "temp:/mnt/d/Videos/Archive/tmp" \
	--output 'subtitle:%(channel)s/%(upload_date)s_%(title).200s/subs/%(title).200s [%(id)s].%(ext)s' \
	--trim-filenames 256 \
	--remote-components ejs:github)

{
	echo "script args: $@"	
		
# TODO: REVIEW NO PLAYLIST flag
# vtt, srt, ttml, srv3, srv2, srv1, json3
	echo "DOWNLOAD SRV3"
	yt-dlp "${SUBS_ARGS[@]}" --sub-format srv3 $@
	echo "DOWNLOAD TTML"
	yt-dlp "${SUBS_ARGS[@]}" --sub-format ttml $@
	echo "DOWNLOAD JSON3"
	yt-dlp "${SUBS_ARGS[@]}" --sub-format json3 $@
	echo "DOWNLOAD SRV2"
	yt-dlp "${SUBS_ARGS[@]}" --sub-format srv2 $@
	echo "DOWNLOAD SRV1"
	yt-dlp "${SUBS_ARGS[@]}" --sub-format srv1 $@
	echo "DOWNLOAD VTT"
	yt-dlp "${SUBS_ARGS[@]}" --sub-format vtt $@
	echo "DOWNLOAD SRT"
	yt-dlp "${SUBS_ARGS[@]}" --sub-format srt $@


	yt-dlp \
		--cookies "/mnt/d/Videos/Archive/youtube.com_cookies.txt" \
		--no-progress \
		--ignore-errors --retries infinite --fragment-retries infinite --file-access-retries infinite --extractor-retries 50 \
		--concurrent-fragments 4 \
		--write-url-link --write-webloc-link --write-desktop-link \
		--format 'bv*+ba/b' \
		--merge-output-format mkv \
		--audio-quality 0 \
		--write-info-json --write-all-thumbnail --write-description --write-comments --write-playlist-metafiles \
		--sub-langs all --write-subs --convert-subs none \
		--embed-thumbnail --embed-metadata --embed-chapters --embed-subs \
		--no-playlist --no-write-playlist-metafiles --playlist-reverse \
		--paths "/mnt/d/Videos/Archive" --paths "temp:/mnt/d/Videos/Archive/tmp" \
		--output '%(channel)s/%(upload_date)s_%(title).200s/%(title).200s [%(id)s][%(vcodec)s %(resolution)s %(acodec)s].%(ext)s' \
		--output 'subtitle:%(channel)s/%(upload_date)s_%(title).200s/subs/%(title).200s [%(id)s].%(ext)s' \
		--output 'thumbnail:%(channel)s/%(upload_date)s_%(title).200s/thumbs/%(title).200s [%(id)s](thumb).%(ext)s' \
		--output 'description:%(channel)s/%(upload_date)s_%(title).200s/%(title).200s [%(id)s].%(ext)s' \
		--output 'infojson:%(channel)s/%(upload_date)s_%(title).200s/%(title).200s [%(id)s].%(ext)s' \
		--output 'link:%(channel)s/%(upload_date)s_%(title).200s/links/%(title).200s [%(id)s](link).%(ext)s' \
		--output 'chapter:%(channel)s/%(upload_date)s_%(title).200s/chapter/%(title).200s [%(id)s](chapter).%(ext)s' \
		--output 'pl_thumbnail:%(channel)s/%(upload_date)s_%(title).200s/pl/%(title).200s [%(id)s](thumb).%(ext)s' \
		--output 'pl_description:%(channel)s/%(upload_date)s_%(title).200s/pl/%(title).200s [%(id)s].%(ext)s' \
		--output 'pl_infojson:%(channel)s/%(upload_date)s_%(title).200s/pl/%(title).200s [%(id)s].%(ext)s' \
		--output 'pl_video:%(channel)s/%(upload_date)s_%(title).200s/pl/%(title).200s [%(id)s][%(vcodec)s %(resolution)s %(acodec)s].%(ext)s' \
		--use-postprocessor ReturnYoutubeDislike:when=pre_process \
		--trim-filenames 256 \
		--exec 'echo "\n\033[1;32mFINISHED DOWNLOAD!"; du -sh {}; echo "\033[0m"' \
		--download-archive "/mnt/d/Videos/Archive/YouTube-Video_IDs_DO_NOT_REMOVE.txt" \
		--remote-components ejs:github \
		$@

	# Check if it exists in any archive
	if yt-dlp --dump-json "$1" 2>/dev/null | grep -q '"extractor": "youtube"'; then
		yt-dlp --get-id "$1" 2>/dev/null | while read id; do
			echo "Checking if video $1 exists in any archive..."
			curl -s https://findyoutubevideo.thetechrobo.ca/api/v4/$id | jq -jr '
		  "ID: ", .id, "\n",
		  (.keys[] |
		    select(
		      .classname != "YouTube" and
		      .classname != "ArchiveOrgCDX" and
		      .classname != "Filmot" and
		      .classname != "removededm"
		    ) |
		    "\(.archived | if . then "\u001b[0;32m" else "\u001b[0;31m" end)\(.name)\t\(.archived)\u001b[0m\n"
		  )' | column -t -s $'\t'
		done
	fi

	echo "EXITED SUCCESSFULLY"

} 2>&1 | tee "/mnt/d/Videos/Archive/download_logs/yt-dlp_videos_$(date -Iseconds).log"
