# koji completion

_comp_cmd_koji__search()
{
    _comp_compgen -a split -- "$("$1" -q search "$2" "$cur*" 2>/dev/null)"
}

_comp_cmd_koji__build()
{
    _comp_cmd_koji__search "$1" build
}

_comp_cmd_koji__package()
{
    _comp_cmd_koji__search "$1" package
}

_comp_cmd_koji__user()
{
    _comp_cmd_koji__search "$1" user
}

_comp_cmd_koji__tag()
{
    _comp_compgen -a split -- "$("$1" -q list-tags 2>/dev/null)"
}

_comp_cmd_koji__target()
{
    _comp_compgen -a split -- "$("$1" -q list-targets 2>/dev/null |
        _comp_awk '{ print $1 }')"
}

_comp_cmd_koji()
{
    local cur prev words cword was_split comp_args
    _comp_initialize -s -- "$@" || return

    local commandix command="" has_command=""
    for ((commandix = 1; commandix < cword; commandix++)); do
        if [[ ${words[commandix]} != -* ]]; then
            command=${words[commandix]}
            has_command=set
            break
        fi
    done

    local noargopts='!(-*|*[co]*)'
    # shellcheck disable=SC2254
    case $prev in
        --help | --help-commands | -${noargopts}h*)
            return
            ;;
        --config | --keytab | -${noargopts}[co])
            _comp_compgen_filedir
            return
            ;;
        --runas | --user | --editor | --by)
            _comp_cmd_koji__user "$1"
            return
            ;;
        --authtype)
            _comp_compgen -- -W 'noauth ssl password kerberos'
            return
            ;;
        --topdir)
            _comp_compgen_filedir -d
            return
            ;;
        --type)
            case ${command-} in
                latest-pkg | list-tagged)
                    _comp_compgen -- -W 'maven'
                    ;;
            esac
            return
            ;;
        --name)
            case ${command-} in
                list-targets)
                    _comp_cmd_koji__target "$1"
                    ;;
            esac
            return
            ;;
        --owner)
            _comp_cmd_koji__user "$1"
            return
            ;;
        --tag | --latestfrom)
            _comp_cmd_koji__tag "$1"
            return
            ;;
        --package)
            _comp_cmd_koji__package "$1"
            return
            ;;
        --build)
            _comp_cmd_koji__build "$1"
            return
            ;;
        --build-target)
            _comp_cmd_koji__target "$1"
            return
            ;;
    esac

    [[ $was_split ]] && return

    if [[ $has_command ]]; then
        if [[ $cur == -* ]]; then
            _comp_compgen_help -- "$command" --help
            [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
            return
        fi

        # How many'th non-option arg (1-based) for $command are we completing?
        local i nth=1
        for ((i = commandix + 1; i < cword; i++)); do
            [[ ${words[i]} == -* ]] || ((nth++))
        done

        case $command in
            build | maven-build | win-build)
                case $nth in
                    1)
                        _comp_cmd_koji__target "$1"
                        ;;
                    2)
                        _comp_compgen_filedir src.rpm
                        ;;
                esac
                ;;
            cancel)
                _comp_cmd_koji__build "$1"
                ;;
            chain-build)
                case $nth in
                    1)
                        _comp_cmd_koji__target "$1"
                        ;;
                esac
                ;;
            download-build)
                case $nth in
                    1)
                        _comp_cmd_koji__build "$1"
                        ;;
                esac
                ;;
            import-comps)
                case $nth in
                    1)
                        _comp_compgen_filedir xml
                        ;;
                    2)
                        _comp_cmd_koji__tag "$1"
                        ;;
                esac
                ;;
            latest-by-tag)
                _comp_cmd_koji__package "$1"
                ;;
            latest-pkg | list-groups | list-tag-inheritance | show-groups)
                case $nth in
                    1)
                        _comp_cmd_koji__tag "$1"
                        ;;
                esac
                ;;
            list-tagged)
                case $nth in
                    1)
                        _comp_cmd_koji__tag "$1"
                        ;;
                    2)
                        _comp_cmd_koji__package "$1"
                        ;;
                esac
                ;;
            list-untagged)
                case $nth in
                    1)
                        _comp_cmd_koji__package "$1"
                        ;;
                esac
                ;;
            move-pkg)
                case $nth in
                    1 | 2)
                        _comp_cmd_koji__tag "$1"
                        ;;
                    *)
                        _comp_cmd_koji__package "$1"
                        ;;
                esac
                ;;
            search)
                case $nth in
                    1)
                        _comp_compgen -- -W 'package build tag target user host
                            rpm'
                        ;;
                esac
                ;;
            tag-pkg | untag-pkg)
                case $nth in
                    1)
                        _comp_cmd_koji__tag "$1"
                        ;;
                    *)
                        _comp_cmd_koji__package "$1"
                        ;;
                esac
                ;;
            taginfo)
                _comp_cmd_koji__tag "$1"
                ;;
            wait-repo)
                case $nth in
                    1)
                        for ((i = commandix + 1; i < cword; i++)); do
                            if [[ ${words[i]} == --target ]]; then
                                _comp_cmd_koji__target "$1"
                                return
                            fi
                        done
                        _comp_cmd_koji__tag "$1"
                        ;;
                esac
                ;;
        esac
        return
    fi

    if [[ $cur == -* ]]; then
        _comp_compgen_help
        [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
    elif [[ ! $has_command ]]; then
        _comp_compgen_split -- "$("$1" --help-commands 2>/dev/null |
            _comp_awk '/^(  +|\t)/ { print $1 }')"
    fi
} &&
    complete -F _comp_cmd_koji koji arm-koji ppc-koji s390-koji sparc-koji
