#!/bin/bash

# arguments: 
# (1) url = raw url from browser (via clipboard)
# (2) type = extraction type defined in urls.txt
# (3) quality (resolution) = value 1, 2 or 3 <=> (N)ormal, (M)edium, (H)igh as shown in ApolloVNC title gadget
# => quality means "conversion quality" (= used by ffmpeg)
# => if downloaded quality is less, "blowing it up to a higher resolution wont give a better result
# => bitrate is fix for the moment (can be changed here in the script)

# print arguments for debuggin purposes
echo $1
echo $2
echo $3

# defines
echo "define yt-dlp path ..."
# set correct path to yt-dlp using original path from installer
tmppwd=$(cat $HOME/.avnc/install_pwd)
dltool=$tmppwd/tools/yt-dlp
echo "dltool: $dltool"

# delete old files
rm $HOME/Downloads/avnctmpdld.webm
rm $HOME/Downloads/avnctmpdld.mpg
rm $HOME/Downloads/avnctmpdld.webm.mp4
rm $HOME/Downloads/avnctmpdld.webm.mkv

# ARG 3: quality
# most videos are in landscape formate
# tiktok uses portrait most of the time
# atm an url is either exported in landscape or portraint format
# (even if the same site can have both formats - but variable formats are not implemented atm)
case $3 in
	0)
		landscape_resolution="640:360"
		portrait_resolution="352:626"
	;;
	1)
		landscape_resolution="720:405"
		portrait_resolution="384:682"
	;;
	2)
		landscape_resolution="848:480"
		portrait_resolution="480:848"
	;;
esac

# ARG 2: type
case $2 in
# classic youtube video (or similar)
 	standard) 
		# standard extraction
		echo "standard extraction (landscape)"
		# eliminate everything after & in url (using sed)
		# => necessary for example for youtube 
		# (otherwise an entire list of videos would be downloaded)
  		rawurl=$(echo $1 | sed 's/&.*$//')
		$dltool -f 'bestvideo[height<=480]+bestaudio/best[height<=480]/bestvideo[ext=mp4]' -o $HOME/Downloads/avnctmpdld.webm $rawurl
		if [ -f $HOME/Downloads/avnctmpdld.webm ]; then
			srcfile='avnctmpdld.webm'
		else
			srcfile='avnctmpdld.webm.mp4'
		fi
		# sometimes an mkv file is produced
		# => use it
		if [ -f $HOME/Downloads/avnctmpdld.webm.mkv ]; then
			srcfile="avnctmpdld.webm.mkv"
		fi
		echo "source file: $srcfile"

		# check if reencoding is necessary
		# => RiVA can't play videos >30 fps
		# (because decoding time is too short in this case)
		fps="0"
		fps=$(ffmpeg -i $HOME/Downloads/$srcfile 2>&1 | sed -n "s/.*, \(.*\) fp.*/\1/p")
	    # previous line can give an empty string for fps
	    # (which leads to an error with -gt)
	    # => therefore set it to "0" in this case
	    if [ $fps -eq "" ]; then
	        fps="0"
	    fi
		echo "detected framerate: $fps"
		if [ $fps -gt 30 ]; then
  			echo "fps > 30 => reencode"
			if [ $fps -eq 60 ]; then
  				reencodefps="-r 30"
			elif [ $fps -eq 50 ]; then
  				reencodefps="-r 25"
			else
  				reencodefps="-r 25"
			fi
			echo "reencode: $reencodefps"
		else
			reencodefps=""
			echo "no reencoding"
		fi
	
		# convert to mpeg1 via ffmpeg
		echo "ffmpeg command:"
		echo "ffmpeg -i ~/Downloads/$srcfile -vcodec mpeg1video -filter:v scale=$landscape_resolution $reencodefps -b:v 2500k -maxrate:v 3000k -bf 3 -ar 44100 -ac 2 -acodec mp2 -b:a 128k ~/Downloads/avnctmpdld.mpg"
		ffmpeg -i $HOME/Downloads/$srcfile -vcodec mpeg1video -filter:v scale=$landscape_resolution $reencodefps -b:v 2500k -maxrate:v 3000k -bf 3 -ar 44100 -ac 2 -acodec mp2 -b:a 128k $HOME/Downloads/avnctmpdld.mpg
	;;

	# tiktok
	tiktok)
		echo "extract tiktok (landscape)"
		$dltool -o $HOME/Downloads/avnctmpdld.webm $1
		ffmpeg -i $HOME/Downloads/avnctmpdld.webm -vcodec mpeg1video -filter:v scale=$portrait_resolution -b:v 2500k -maxrate:v 3000k -bf 3 -ar 44100 -ac 2 -acodec mp2 -b:a 128k $HOME/Downloads/avnctmpdld.mpg 
	;;

esac
