#!/usr/bin/env bash

#shopt -s extglob
#shopt -s nullglob
#shopt -s failglob


DEBUG=${DEBUG:-$DRY_RUN}
function @ () {
	echo "### $@"
	[ -z $DRY_RUN ] \
		&& "$@"
}


FPS=${FPS:-8}
# XXX ffmpeg does not seem to support extglob...
#PATTERN=${PATTERN:-'*.@(JPG|jpg|JPEG|jpeg|PNG|png)'}
PATTERN=${PATTERN:-'*.jpeg'}
ANIM_EXT=.gif

while [[ $# != 0 ]] ; do
	case "$1" in
		-h|--help)
			echo "Usage: $(basename $0) [OPTIONS] [PATTERN]"
			echo
			echo "Options:"
			echo "	-h --help	- print this message and exit" 
			echo "	-r --rate FPS	- set framerate (default: $FPS)"
			echo "	-p --pattern PATTERN"
			echo "			- image pattern to use (default: '$PATTERN')"
			echo "  --apng          - use .apng instead of .gif (experimental)"
			echo
			echo "NOTE: option defaults can bbe overriden by coresponding env variables."
			echo
			exit
			;;
		-r|--rate)
			FPS="$2"
			shift 2
			continue
			;;
		-p|--pattern)
			PATTERN="$2"
			shift 2
			continue
			;;
		--apng)
			# XXX do we need to do the palette dance here???
			ANIM_EXT=.apng
			shift
			continue
			;;

		# trailing args...
		*)
			PATTERN="$1"
			shift
			continue
			;;
	esac
done

LST=($PATTERN)


# generate name...
A=${LST[0]}
A=${A%.*}
B=${LST[$(( ${#LST[@]} - 1 ))]}
B=${B%.*}

NAME=${NAME:-${A}-${B}}

PALETTE=${PALETTE:-.palette.png}


# generate...
{
	set -o noglob
	# gif palette...
	@ ffmpeg \
		-pattern_type glob \
			-i $PATTERN \
		-vf palettegen \
		"$PALETTE"
	# gif...
	@ ffmpeg \
		-r $FPS \
		-pattern_type glob \
			-i $PATTERN \
		-i "$PALETTE" \
		-filter_complex paletteuse=dither=none \
		"${NAME}${ANIM_EXT}"
	# cleanup...
	@ rm "$PALETTE"

	# mkv...
	@ ffmpeg \
		-r $FPS \
		-pattern_type glob \
			-i $PATTERN \
		"${NAME}".mkv
	#set +o noglob
}

