_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="allow allow-regex allow-wild deny checkout debug disable enable flush help logging query reconfigure regex reloaddns reloadlists status tail uninstall updateGravity updatePihole version wildcard arpflush api"
            COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
        ;;
        "allow"|"deny"|"wildcard"|"regex"|"allow-regex"|"allow-wild")
            opts_lists="\not \--delmode \--quiet \--list \--help"
            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