# autorandr/auto-disper completion by Maciej 'macieks' Sitarz <macieks@freesco.pl>
# XDG additions and service dir filtering by Vladimir-csp

_autorandr ()
{
	local cur prev opts lopts prfls AR_DIRS OIFS

	COMPREPLY=()
	cur="${COMP_WORDS[COMP_CWORD]}"
	prev="${COMP_WORDS[COMP_CWORD-1]}"

	opts="-h -c -s -r -l -d"
	lopts="--help --change --save --remove --load --default --force --fingerprint --config --dry-run"

	# find system-level autorandr dirs
	OIFS="$IFS"
	IFS=':'
		for DIR in ${XDG_CONFIG_DIRS:-/etc/xdg}
		do
			IFS="$OIFS"
			[ -d "$DIR/autorandr" ] && AR_DIRS=( "${AR_DIRS[@]}" "$DIR/autorandr" )
		done
	IFS="$OIFS"

	# find user-level autorandr dir
	if [ -d "$HOME/.autorandr" ]; then
	        AR_DIRS=( "${AR_DIRS[@]}" "$HOME/.autorandr" )
	elif [ -d "${XDG_CONFIG_HOME:-$HOME/.config}/autorandr/" ]; then
	        AR_DIRS=( "${AR_DIRS[@]}" "${XDG_CONFIG_HOME:-$HOME/.config}/autorandr/" )
	fi

	if [ "${#AR_DIRS[@]}" -gt 0 ]
	then
		prfls="$(find "${AR_DIRS[@]}" -mindepth 1 -maxdepth 1 -type d ! -name "*.d" -printf '%f\n' 2>/dev/null | sort -u)"
	else
		prfls=""
	fi

	case "${cur}" in
		--*)
			COMPREPLY=( $( compgen -W "${lopts}" -- $cur ) )
			return 0
			;;
		-*)
			COMPREPLY=( $( compgen -W "${opts} ${lopts}" -- $cur ) )
			return 0
			;;
		*)
			if [ $COMP_CWORD -eq 1 ]; then
				COMPREPLY=( $( compgen -W "${opts} ${lopts}" -- $cur ) )
			fi
			;;
		esac

	case "${prev}" in
		-r|--remove|-l|--load|-d|--default)
			COMPREPLY=( $( compgen -W "${prfls}" -- $cur ) )
			return 0
			;;
		*)
			;;
	esac

	return 0
}
complete -F _autorandr autorandr
