# bts completion                                      -*- shell-script -*-

# List bug numbers from bugs cache in ~/.devscripts_cache/bts
_cached_bugs()
{
    [[ -d $HOME/.devscripts_cache/bts ]] &&
        find $HOME/.devscripts_cache/bts -maxdepth 1 -name "${cur}[0-9]*.html" \
            -printf "%f\n" | cut -d'.' -f1
}

# List APT source packages prefixed with "src:"
_src_packages_with_prefix()
{
    ppn=${cur:4} # partial package name, after stripping "src:"
    compgen -P "src:" -W '$(_xfunc apt-cache _apt_cache_sources "$ppn")' \
        -- "$ppn"
}

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

    case $prev in
        show | bugs)
            COMPREPLY=($(compgen -W 'release-critical RC from: tag:
                usertag:' -- "$cur") $(_cached_bugs)
            $(_src_packages_with_prefix))
            return
            ;;
        select)
            COMPREPLY=($(compgen -W 'package: source: maintainer: submitter:
                severity: status: tag: owner: correspondent: affects: bugs:
                users:  archive:' -- "$cur"))
            return
            ;;
        status)
            COMPREPLY=($(compgen -W 'file: fields: verbose' -- "$cur")
            $(_cached_bugs))
            return
            ;;
        block | unblock)
            COMPREPLY=($(compgen -W 'by with' -- "$cur"))
            return
            ;;
        severity)
            COMPREPLY=($(compgen -W 'wishlist minor normal important serious
                grave critical' -- "$cur"))
            return
            ;;
        limit)
            COMPREPLY=($(compgen -W 'submitter date subject msgid package
                source tag severity owner affects archive' -- "$cur"))
            return
            ;;
        clone | "done" | reopen | archive | unarchive | retitle | summary | submitter | found | notfound | fixed | notfixed | merge | forcemerge | unmerge | claim | unclaim | forwarded | notforwarded | owner | noowner | subscribe | unsubscribe | reportspam | spamreport | affects | usertag | usertags | reassign | tag | tags)
            COMPREPLY=($(_cached_bugs))
            return
            ;;
        package)
            COMPREPLY=($(_xfunc apt-cache _apt_cache_packages))
            return
            ;;
        cache)
            COMPREPLY=($(_xfunc apt-cache _apt_cache_packages)
            $(_src_packages_with_prefix)
            $(compgen -W 'from: release-critical RC' -- "$cur"))
            return
            ;;
        cleancache)
            COMPREPLY=($(_xfunc apt-cache _apt_cache_packages)
            $(_src_packages_with_prefix)
            $(compgen -W 'from: tag: usertag: ALL' -- "$cur"))
            return
            ;;
        user)
            # non-predicible arguments
            COMPREPLY=()
            return
            ;;
        :)
            # Chances are that "src:<src_package>" is being completed
            # COMP_WORDS would be: "bts cleancache src : <partial_pkg_name>"
            pos=$((COMP_CWORD - 2))
            if [[ $pos -gt 0 && ${COMP_WORDS[pos]} == "src" ]]; then
                COMPREPLY=($(_xfunc apt-cache _apt_cache_src_packages))
                return
            fi
            ;;
    esac

    $split && return

    COMPREPLY=($(compgen -W '--offline --online --no-offline
        --no-action --cache --no-cache --cache-mode --cache-delay --mbox
        --mailreader --cc-addr --use-default-cc --no-use-default-cc
        --sendmail --mutt --no-mutt --smtp-host --smtp-username
        --smtp-helo --bts-server --force-refresh --no-force-refresh
        --only-new --include-resolved --no-include-resolved --no-ack --ack
        --interactive --force-interactive --no-interactive --quiet
        --no-conf --noconf
        show bugs select status clone done reopen archive unarchive retitle
        summary submitter reassign found notfound fixed notfixed block unblock
        merge forcemerge unmerge tag tags affects user usertag usertags claim
        unclaim severity forwarded notforwarded package limit owner noowner
        subscribe unsubscribe reportspam spamreport cache cleancache version
        help' -- "$cur"))

} &&
    complete -F _bts bts

# ex: filetype=sh
