# Bash completion script for pulp-admin

_pulp_admin()
{
    # Main completion function

    # for (( i = 0; i < ${#COMP_WORDS[*]} - 1; i++ )); do

    COMPREPLY=()
    local cur prev
    local -a words

    # Set the $cur, $prev, and $words variable.  The helper function might not
    # be available.
    if type _get_comp_words_by_ref &>/dev/null ; then
        _get_comp_words_by_ref cur prev words
    else
        cur=$2 prev=$3 words=("${COMP_WORDS[@]}")
    fi

    
    command=""
    # command_length=${#COMP_WORDS[@]}
    for i in `seq ${#COMP_WORDS[@]}`; do
        if [[ ! ${COMP_WORDS[$i]} =~ --.* ]]; then
                command="$command ${COMP_WORDS[$i]}"
            # echo
            # echo here0: $command
        fi
    done

    command=$(echo -n $command)

    if [ ${cur}1 != "1" ]; then
        command=${command%$cur}
        command=$(echo -n $command)
        # echo here0: ${#COMP_WORDS[@]}
        # echo here0: $command
    # else
        # command=${COMP_WORDS[@]:1:$command_length}
        # echo here1: $command
    fi

    completions=""

    # echo
    # echo cur: $cur
    # echo prev: $prev
    # echo words: $words
    # echo COMP_WORDS[0]: ${COMP_WORDS[0]}
    # echo COMP_WORDS: ${COMP_WORDS[@]}
    # echo COMP_WORDS: ${COMP_WORDS[@]:1}
    # echo command length: $command_length
    # echo command: \"$command\"
    # echo command length: ${#command}


    root_commands="login logout repo tasks consumer user server"
    case "$command" in
        "login")
            completions="--username --password"
            ;;
        "logout")
            completions=""
            ;;
        "repo search")
            completions="--limit --skip --filters --sort --fields --str-eq --int-eq --match --in --not --gt --gte --lt --lte"
            ;;
        "repo create")
            completions="--repo-id --feed --display-name --description --note --auto-publish --only-newest --skip-types --verify-size --verify-checksum --remove-old --retain-old-count --relative-url --serve-http --serve-https --checksum-type --gpg-key --regenerate-metadata --feed-ca-cert --verify-feed-ssl --feed-cert --feed-key --host-ca --auth-ca --auth-cert --proxy-url --proxy-port --proxy-user --proxy-pass --max-speed --num-threads"
            ;;
        "repo list")
            completions="--details"
            ;;
        "repo update")
            completions="--repo-id --feed --display-name --description --note --auto-publish --only-newest --skip-types --verify-size --verify-checksum --remove-old --retain-old-count --relative-url --serve-http --serve-https --checksum-type --gpg-key --regenerate-metadata --feed-ca-cert --verify-feed-ssl --feed-cert --feed-key --host-ca --auth-ca --auth-cert --proxy-url --proxy-port --proxy-user --proxy-pass --max-speed --num-threads"
            ;;
        "repo delete")
            completions="--repo-id"
            ;;
        "repo tasks cancel")
            completions="--task-id"
            ;;
        "repo tasks list")
            completions="--repo-id"
            ;;
        "repo tasks details")
            completions="--task-id"
            ;;
        "repo tasks")
            completions="cancel list details"
            ;;
        "repo group search")
            completions="--limit --skip --filters --sort --fields --str-eq --int-eq --match --in --not --gt --gte --lt --lte"
            ;;
        "repo group create")
            completions="--group-id --display-name --description --note"
            ;;
        "repo group list")
            completions="--details --fields"
            ;;
        "repo group update")
            completions="--group-id --display-name --description --note"
            ;;
        "repo group delete")
            completions="--group-id"
            ;;
        "repo group members add")
            completions="--filters --group-id --str-eq --int-eq --match --in --not --gt --gte --lt --lte"
            ;;
        "repo group members list")
            completions="--group-id"
            ;;
        "repo group members remove")
            completions="--filters --group-id --str-eq --int-eq --match --in --not --gt --gte --lt --lte"
            ;;
        "repo group members")
            completions="add list remove"
            ;;
        "repo group")
            completions="search create list update delete members"
            ;;
        "repo sync status")
            completions="--repo-id"
            ;;
        "repo sync run")
            completions="--repo-id --bg"
            ;;
        "repo sync schedules create")
            completions="--schedule --failure-threshold --repo-id"
            ;;
        "repo sync schedules next")
            completions="--quiet --repo-id"
            ;;
        "repo sync schedules list")
            completions="--details --repo-id"
            ;;
        "repo sync schedules update")
            completions="--schedule-id --schedule --failure-threshold --enabled --repo-id"
            ;;
        "repo sync schedules delete")
            completions="--schedule-id --repo-id"
            ;;
        "repo sync schedules")
            completions="create next list update delete"
            ;;
        "repo sync")
            completions="status run schedules"
            ;;
        "repo publish status")
            completions="--repo-id"
            ;;
        "repo publish run")
            completions="--repo-id --bg"
            ;;
        "repo publish schedules create")
            completions="--schedule --failure-threshold --repo-id"
            ;;
        "repo publish schedules next")
            completions="--quiet --repo-id"
            ;;
        "repo publish schedules list")
            completions="--details --repo-id"
            ;;
        "repo publish schedules update")
            completions="--schedule-id --schedule --failure-threshold --enabled --repo-id"
            ;;
        "repo publish schedules delete")
            completions="--schedule-id --repo-id"
            ;;
        "repo publish schedules")
            completions="create next list update delete"
            ;;
        "repo publish")
            completions="status run schedules"
            ;;
        "repo uploads category")
            completions="--repo-id --category-id --name --description --display-order --group -v"
            ;;
        "repo uploads group")
            completions="--repo-id --group-id --name --description --cond-name --mand-name --opt-name --default-name --display-order --langonly --default --user-visible -v"
            ;;
        "repo uploads resume")
            completions="-v"
            ;;
        "repo uploads list")
            completions=""
            ;;
        "repo uploads cancel")
            completions="--force"
            ;;
        "repo uploads rpm")
            completions="--repo-id --file --dir -v"
            ;;
        "repo uploads errata")
            completions="--repo-id --erratum-id --title --description --version --release --type --status --updated --issued --reference-csv --pkglist-csv --from --pushcount --reboot-suggested --severity --rights --summary --solution -v"
            ;;
        "repo uploads")
            completions="category group resume list cancel rpm errata"
            ;;
        "repo units all")
            completions="--repo-id --limit --skip"
            ;;
        "repo units srpm")
            completions="--repo-id --fields --ascending --descending --limit --skip"
            ;;
        "repo units package_group")
            completions="--repo-id --fields --ascending --descending --limit --skip"
            ;;
        "repo units package_category")
            completions="--repo-id --fields --ascending --descending --limit --skip"
            ;;
        "repo units drpm")
            completions="--repo-id --fields --ascending --descending --limit --skip"
            ;;
        "repo units distribution")
            completions="--repo-id"
            ;;
        "repo units rpm")
            completions="--repo-id --fields --ascending --descending --limit --skip"
            ;;
        "repo units errata")
            completions="--repo-id --erratum-id --fields --ascending --descending --limit --skip"
            ;;
        "repo units")
            completions="all srpm package_group package_category drpm distribution rpm errata"
            ;;
        "repo copy srpm")
            completions="--from-repo-id --to-repo-id --dry-run --match --not --gt --gte --lt --lte --after --before"
            ;;
        "repo copy rpm")
            completions="--from-repo-id --to-repo-id --dry-run --match --not --gt --gte --lt --lte --after --before"
            ;;
        "repo copy drpm")
            completions="--from-repo-id --to-repo-id --dry-run --match --not --gt --gte --lt --lte --after --before"
            ;;
        "repo copy")
            completions="srpm rpm drpm"
            ;;
        "repo")
            completions="search create list update delete tasks group sync publish uploads units copy"
            ;;
        "tasks cancel")
            completions="--task-id"
            ;;
        "tasks list")
            completions=""
            ;;
        "tasks details")
            completions="--task-id"
            ;;
        "tasks")
            completions="cancel list details"
            ;;
        "consumer unbind")
            completions="--consumer-id --repo-id"
            ;;
        "consumer search")
            completions="--limit --skip --filters --sort --fields --str-eq --int-eq --match --in --not --gt --gte --lt --lte"
            ;;
        "consumer unregister")
            completions="--id"
            ;;
        "consumer bind")
            completions="--consumer-id --repo-id"
            ;;
        "consumer list")
            completions="--details --bindings --fields"
            ;;
        "consumer update")
            completions="--id --display-name --description --note"
            ;;
        "consumer history")
            completions="--id --event-type --limit --sort --start-date --end-date"
            ;;
        "consumer package-group install")
            completions="--name --import-keys --id --no-commit --reboot"
            ;;
        "consumer package-group uninstall")
            completions="--name --id --no-commit --reboot"
            ;;
        "consumer package-group")
            completions="install uninstall"
            ;;
        "consumer group search")
            completions="--limit --skip --filters --sort --fields --str-eq --int-eq --match --in --not --gt --gte --lt --lte"
            ;;
        "consumer group create")
            completions="--group-id --display-name --description --note"
            ;;
        "consumer group list")
            completions="--details --fields"
            ;;
        "consumer group update")
            completions="--group-id --display-name --description --note"
            ;;
        "consumer group delete")
            completions="--group-id"
            ;;
        "consumer group members add")
            completions="--filters --group-id --str-eq --int-eq --match --in --not --gt --gte --lt --lte"
            ;;
        "consumer group members list")
            completions="--group-id"
            ;;
        "consumer group members remove")
            completions="--filters --group-id --str-eq --int-eq --match --in --not --gt --gte --lt --lte"
            ;;
        "consumer group members")
            completions="add list remove"
            ;;
        "consumer group")
            completions="search create list update delete members"
            ;;
        "consumer errata install")
            completions="--errata-id --import-keys --id --no-commit --reboot"
            ;;
        "consumer errata")
            completions="install"
            ;;
        "consumer package update")
            completions="--name --import-keys --all --id --no-commit --reboot"
            ;;
        "consumer package install")
            completions="--name --import-keys --id --no-commit --reboot"
            ;;
        "consumer package uninstall")
            completions="--name --id --no-commit --reboot"
            ;;
        "consumer package")
            completions="update install uninstall"
            ;;
        "consumer")
            completions="unbind search unregister bind list update history package-group group errata package"
            ;;
        "user create")
            completions="--login --password --name"
            ;;
        "user list")
            completions="--details --fields"
            ;;
        "user update")
            completions="--login --name"
            ;;
        "user delete")
            completions="--login"
            ;;
        "user")
            completions="create list update delete"
            ;;
        "server importers")
            completions=""
            ;;
        "server distributors")
            completions=""
            ;;
        "server types")
            completions=""
            ;;
        "server")
            completions="importers distributors types"
            ;;
    esac

    # echo completions: $completions
    # echo COMP_WORDS length: ${#COMP_WORDS[@]}
                            
    if [ ${#COMP_WORDS[@]} -eq 2 ]; then
        COMPREPLY=( $( compgen -W '$root_commands' -- "$cur" ) )
    else
        COMPREPLY=( $( compgen -W '$completions' -- "$cur" ) )
    fi

    return 0

} &&

complete -F _pulp_admin pulp-admin

# Local variables:
# mode: shell-script
# sh-basic-offset: 4
# sh-indent-comment: t
# indent-tabs-mode: nil
# End:
# ex: ts=4 sw=4 et filetype=sh
