_pihole() {
	local cur prev opts opts_checkout opts_debug  opts_logging opts_query opts_update opts_version
	COMPREPLY=()
	cur="${COMP_WORDS[COMP_CWORD]}"
	prev="${COMP_WORDS[COMP_CWORD-1]}"
	prev2="${COMP_WORDS[COMP_CWORD-2]}"

	case "${prev}" in
		"pihole")
			opts="blacklist checkout debug disable enable flush help logging query reconfigure regex restartdns status tail uninstall updateGravity updatePihole version wildcard whitelist arpflush"
			COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
		;;
		"whitelist"|"blacklist"|"wildcard"|"regex")
			opts_lists="\--delmode \--noreload \--quiet \--list \--nuke"
			COMPREPLY=( $(compgen -W "${opts_lists}" -- ${cur}) )
		;;
		"checkout")
			opts_checkout="core ftl web master dev"
			COMPREPLY=( $(compgen -W "${opts_checkout}" -- ${cur}) )
		;;
		"debug")
			opts_debug="-a"
			COMPREPLY=( $(compgen -W "${opts_debug}" -- ${cur}) )
		;;
		"logging")
			opts_logging="on off 'off noflush'"
			COMPREPLY=( $(compgen -W "${opts_logging}" -- ${cur}) )
		;;
		"query")
			opts_query="--partial --all"
			COMPREPLY=( $(compgen -W "${opts_query}" -- ${cur}) )
		;;
		"updatePihole"|"-up")
			opts_update="--check-only"
			COMPREPLY=( $(compgen -W "${opts_update}" -- ${cur}) )
		;;
		"core"|"admin"|"ftl")
			if [[ "$prev2" == "checkout" ]]; then
				opts_checkout="master dev"
				COMPREPLY=( $(compgen -W "${opts_checkout}" -- ${cur}) )
			else
				return 1
			fi
		;;
		*)
		return 1
		;;
	esac
	return 0
}
complete -F _pihole pihole