_pihole() {
	local cur prev opts opts_admin opts_checkout opts_chronometer opts_debug opts_interface  opts_logging opts_privacy 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="admin blacklist checkout chronometer 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}) )
		;;
		"admin")
			opts_admin="celsius email fahrenheit interface kelvin password privacylevel"
			COMPREPLY=( $(compgen -W "${opts_admin}" -- ${cur}) )
		;;
		"checkout")
			opts_checkout="core ftl web master dev"
			COMPREPLY=( $(compgen -W "${opts_checkout}" -- ${cur}) )
		;;
		"chronometer")
			opts_chronometer="\--exit \--json \--refresh"
			COMPREPLY=( $(compgen -W "${opts_chronometer}" -- ${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="-adlist -all -exact"
			COMPREPLY=( $(compgen -W "${opts_query}" -- ${cur}) )
		;;
		"updatePihole"|"-up")
			opts_update="--check-only"
			COMPREPLY=( $(compgen -W "${opts_update}" -- ${cur}) )
		;;
		"version")
			opts_version="\--admin \--current \--ftl \--hash \--latest \--pihole"
			COMPREPLY=( $(compgen -W "${opts_version}" -- ${cur}) )
		;;
		"interface")
			if ( [[ "$prev2" == "admin" ]] || [[ "$prev2" == "-a" ]] ); then
				opts_interface="$(cat /proc/net/dev | cut -d: -s -f1)"
				COMPREPLY=( $(compgen -W "${opts_interface}" -- ${cur}) )
			else
				return 1
			fi
		;;
		"privacylevel")
			if ( [[ "$prev2" == "admin" ]] || [[ "$prev2" == "-a" ]] ); then
				opts_privacy="0 1 2 3"
				COMPREPLY=( $(compgen -W "${opts_privacy}" -- ${cur}) )
			else
				return 1
			fi
		;;
		"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