# koji completion                                          -*- shell-script -*-

_koji_search()
{
    COMPREPLY+=($(compgen -W \
        '$("$1" -q search $2 "$cur*" 2>/dev/null)' -- "$cur"))
}

_koji_build()
{
    _koji_search "$1" build
}

_koji_package()
{
    _koji_search "$1" package
}

_koji_user()
{
    _koji_search "$1" user
}

_koji_tag()
{
    COMPREPLY+=($(compgen -W '$("$1" -q list-tags 2>/dev/null)' -- "$cur"))
}

_koji_target()
{
    COMPREPLY+=($(compgen -W '$("$1" -q list-targets 2>/dev/null |
        awk "{ print \$1 }")' -- "$cur"))
}

_koji()
{
    local cur prev words cword split
    _init_completion -s || return

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

    case $prev in
        --help | --help-commands | -!(-*)h*)
            return
            ;;
        --config | --keytab | -!(-*)[co])
            _filedir
            return
            ;;
        --runas | --user | --editor | --by)
            _koji_user "$1"
            return
            ;;
        --authtype)
            COMPREPLY=($(compgen -W 'noauth ssl password kerberos' -- "$cur"))
            return
            ;;
        --topdir)
            _filedir -d
            return
            ;;
        --type)
            case ${command-} in
                latest-pkg | list-tagged)
                    COMPREPLY=($(compgen -W 'maven' -- "$cur"))
                    ;;
            esac
            return
            ;;
        --name)
            case ${command-} in
                list-targets)
                    _koji_target "$1"
                    ;;
            esac
            return
            ;;
        --owner)
            _koji_user "$1"
            return
            ;;
        --tag | --latestfrom)
            _koji_tag "$1"
            return
            ;;
        --package)
            _koji_package "$1"
            return
            ;;
        --build)
            _koji_build "$1"
            return
            ;;
        --build-target)
            _koji_target "$1"
            return
            ;;
    esac

    $split && return

    if [[ -v command ]]; then
        if [[ $cur == -* ]]; then
            COMPREPLY=($(compgen -W \
                '$(_parse_help "$1" "$command --help")' -- "$cur"))
            [[ ${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)
                        _koji_target "$1"
                        ;;
                    2)
                        _filedir src.rpm
                        ;;
                esac
                ;;
            cancel)
                _koji_build "$1"
                ;;
            chain-build)
                case $nth in
                    1)
                        _koji_target "$1"
                        ;;
                esac
                ;;
            download-build)
                case $nth in
                    1)
                        _koji_build "$1"
                        ;;
                esac
                ;;
            import-comps)
                case $nth in
                    1)
                        _filedir xml
                        ;;
                    2)
                        _koji_tag "$1"
                        ;;
                esac
                ;;
            latest-by-tag)
                _koji_package "$1"
                ;;
            latest-pkg | list-groups | list-tag-inheritance | show-groups)
                case $nth in
                    1)
                        _koji_tag "$1"
                        ;;
                esac
                ;;
            list-tagged)
                case $nth in
                    1)
                        _koji_tag "$1"
                        ;;
                    2)
                        _koji_package "$1"
                        ;;
                esac
                ;;
            list-untagged)
                case $nth in
                    1)
                        _koji_package "$1"
                        ;;
                esac
                ;;
            move-pkg)
                case $nth in
                    1 | 2)
                        _koji_tag "$1"
                        ;;
                    *)
                        _koji_package "$1"
                        ;;
                esac
                ;;
            search)
                case $nth in
                    1)
                        COMPREPLY=($(compgen -W 'package build tag target
                            user host rpm' -- "$cur"))
                        ;;
                esac
                ;;
            tag-pkg | untag-pkg)
                case $nth in
                    1)
                        _koji_tag "$1"
                        ;;
                    *)
                        _koji_package "$1"
                        ;;
                esac
                ;;
            taginfo)
                _koji_tag "$1"
                ;;
            wait-repo)
                case $nth in
                    1)
                        for ((i = commandix + 1; i < cword; i++)); do
                            if [[ ${words[i]} == --target ]]; then
                                _koji_target "$1"
                                return
                            fi
                        done
                        _koji_tag "$1"
                        ;;
                esac
                ;;
        esac
        return
    fi

    if [[ $cur == -* ]]; then
        COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur"))
        [[ ${COMPREPLY-} == *= ]] && compopt -o nospace
    elif [[ ! -v command ]]; then
        COMPREPLY=($(compgen -W '$("$1" --help-commands 2>/dev/null | \
            awk "/^(  +|\t)/ { print \$1 }")' -- "$cur"))
    fi
} &&
    complete -F _koji koji arm-koji ppc-koji s390-koji sparc-koji

# ex: filetype=sh
