#  OpenVPN 3 Linux client -- Next generation OpenVPN client
#
#  SPDX-License-Identifier: AGPL-3.0-only
#
#  Copyright (C) 2017 - 2026  OpenVPN Inc <sales@openvpn.net>
#
#
#  This script is automatically generated by gen-openvpn2-completion.py
#  Any modifications here will be overwritten.
#

_openvpn2_completion()
{
    local cur prev OPTS
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    case $prev in
        '--config')
            # Prepare a simple filter, providing partial matching
            filter="cat" # by default everything passes
            if [ -n "$cur" ]; then
                filter="grep -E ^$cur"
            fi

            selopts="-W"
            # Only list files which most likely are OpenVPN configuration files
            selopts="$selopts $(grep -sm1 -E '(client|remote |port |lport |rport |key |cert |ca )' ${cur}*.conf ${cur}*.ovpn | cut -d: -f1 | $filter | tr '\n' ' ')"

            # Add directories too, but ignore those starting with '.{some-alpha-num-letters}'
            selopts="$selopts $(compgen -d -- $cur | sed 's#$#/#' | grep -vE '^\.\w+' | tr '\n' ' ')"

            # all information gathered, generate the completion reply
            COMPREPLY=( $( compgen "${selopts}" -- $cur ) )
            ;;
    
        '--auth')
            COMPREPLY=( $(compgen -W  "{"SHA1","SHA256","SHA384","SHA512"}" -- $cur) )
            return 0
            ;;
    
        '--auth-retry')
            COMPREPLY=( $(compgen -W  "{"none","nointeract","interact"}" -- $cur) )
            return 0
            ;;
    
        '--cipher')
            COMPREPLY=( $(compgen -W  "{"AES-128-CBC","AES-192-CBC","AES-256-CBC","AES-128-GCM","AES-192-GCM","AES-256-GCM"}" -- $cur) )
            return 0
            ;;
    
        '--comp-lzo')
            COMPREPLY=( $(compgen -W  "{"yes","no","adaptive"}" -- $cur) )
            return 0
            ;;
    
        '--compress')
            COMPREPLY=( $(compgen -W  "{"lzo","lz4","lz4-v2","stub","stub-v2"}" -- $cur) )
            return 0
            ;;
    
        '--dev-type')
            COMPREPLY=( $(compgen -W  "tun" -- $cur) )
            return 0
            ;;
    
        '--key-direction')
            COMPREPLY=( $(compgen -W  "{"0","1"}" -- $cur) )
            return 0
            ;;
    
        '--mode')
            COMPREPLY=( $(compgen -W  "{"client","p2p"}" -- $cur) )
            return 0
            ;;
    
        '--ns-cert-type')
            COMPREPLY=( $(compgen -W  "{"client","server"}" -- $cur) )
            return 0
            ;;
    
        '--profile-override')
            COMPREPLY=( $(compgen -W  "{"server-override","port-override","proto-override","ipv6","dns-fallback-google","dns-scope","dns-setup-disabled","dns-sync-lookup","auth-fail-retry","proxy-host","proxy-port","proxy-username","proxy-password","proxy-auth-cleartext","enable-legacy-algorithms","allow-compression","persist-tun"}" -- $cur) )
            return 0
            ;;
    
        '--proto')
            COMPREPLY=( $(compgen -W  "{"udp","tcp","tcp-client"}" -- $cur) )
            return 0
            ;;
    
        '--redirect-gateway')
            COMPREPLY=( $(compgen -W  "{"autolocal","def1","bypass-dhcpbypass-dns","block-local","ipv4","!ipv4","ipv6","!ipv6"}" -- $cur) )
            return 0
            ;;
    
        '--redirect-private')
            COMPREPLY=( $(compgen -W  "{"autolocal","def1","bypass-dhcpbypass-dns","block-local","ipv4","!ipv4","ipv6","!ipv6"}" -- $cur) )
            return 0
            ;;
    
        '--remote-cert-tls')
            COMPREPLY=( $(compgen -W  "{"client","server"}" -- $cur) )
            return 0
            ;;
    
        '--tls-cert-profile')
            COMPREPLY=( $(compgen -W  "{"legacy","preferred","suiteb"}" -- $cur) )
            return 0
            ;;
    
        '--tls-version-max')
            COMPREPLY=( $(compgen -W  "{"1.0","1.1","1.2","1.3"}" -- $cur) )
            return 0
            ;;
    
        '--tls-version-min')
            COMPREPLY=( $(compgen -W  "{"1.0","1.1","1.2","1.3","or-highest"}" -- $cur) )
            return 0
            ;;
    
        '--topology')
            COMPREPLY=( $(compgen -W  "{"subnet","net30"}" -- $cur) )
            return 0
            ;;
    
        '--verb')
            COMPREPLY=( $(compgen -W  "{"1","2","3","4","5","6"}" -- $cur) )
            return 0
            ;;
    
    esac
    case $cur in
        -*)
            OPTS="{"-h","--auth","--auth-retry","--auth-user-pass","--ca","--cd","--cert","--cipher","--client","--comp-lzo","--compress","--config","--connect-retry","--connect-retry-max","--daemon","--dev","--dev-type","--dhcp-option","--extra-certs","--float","--hand-window","--http-proxy","--http-proxy-user-pass","--ifconfig","--ifconfig-ipv6","--ignore-unknown-option","--inactive","--keepalive","--key","--key-direction","--local","--lport","--mode","--mssfix","--ns-cert-type","--persist-tun","--ping","--ping-restart","--pkcs12","--port","--profile-override","--proto","--push-peer-info","--redirect-gateway","--redirect-private","--remote","--remote-cert-eku","--remote-cert-ku","--remote-cert-tls","--remote-random","--reneg-sec","--route","--route-gateway","--route-ipv6","--route-metric","--route-nopull","--server-poll-timeout","--setenv","--static-challenge","--tcp-queue-limit","--tls-auth","--tls-cert-profile","--tls-cipher","--tls-client","--tls-crypt","--tls-crypt-v2","--tls-version-min","--tls-version-max","--tls-timeout","--topology","--tran-window","--tun-mtu","--verb","--verify-x509-name"}"
            COMPREPLY=( $(compgen -W "${OPTS[*]}" -- $cur) )
            return 0;
            ;;
    esac
    return 0
}

complete -F _openvpn2_completion openvpn2
