# jarsigner(1) completion                                  -*- shell-script -*-

_jarsigner()
{
    local cur prev words cword
    _init_completion || return

    case $prev in
        -keystore)
            COMPREPLY=($(compgen -W 'NONE' -- "$cur"))
            _filedir '@(jks|ks|p12|pfx)'
            return
            ;;
        -storepass | -keypass | -sigfile | -digestalg | -sigalg | -tsacert | -tsapolicyid | \
            -tsadigestalg | -altsigner | -altsignerpath | -providerName | -providerClass | \
            -providerArg)
            return
            ;;
        -certchain | -tsa)
            _filedir
            return
            ;;
        -storetype)
            COMPREPLY=($(compgen -W 'JKS PKCS11 PKCS12' -- "$cur"))
            return
            ;;
        -signedjar)
            _filedir '@(jar|apk)'
            return
            ;;
    esac

    # Check if a jar was already given.
    local i jar=false
    for ((i = 1; i < ${#words[@]} - 1; i++)); do
        if [[ ${words[i]} == *.@(jar|apk) && \
            ${words[i - 1]} != -signedjar ]]; then
            jar=true
            break
        fi
    done

    if ! $jar; then
        if [[ $cur == -* ]]; then
            # Documented as "should not be used": -internalsf, -sectionsonly
            COMPREPLY=($(compgen -W '-keystore -storepass -storetype
                -keypass -sigfile -signedjar -digestalg -sigalg -verify
                -verbose -certs -tsa -tsacert -altsigner -altsignerpath
                -protected -providerName -providerClass -providerArg' \
                -- "$cur"))
        fi
        _filedir '@(jar|apk)'
    fi
} &&
    complete -F _jarsigner jarsigner

# ex: filetype=sh
