#compdef twgit

_twgit() {

    local curcontext="$curcontext" state line
    typeset -A opt_args

    _arguments \
        '1: :->command' \
        '2: :->action' \
        '3: :->option'

    case $state in
        (command)
            compadd "$@" clean feature demo help init hotfix release tag update
            ;;
        (action)
            case $words[2] in
                (clean)     ret=0
                            ;;
                (feature)
                            compadd "$@" committers help list merge-into-release merge-into-hotfix migrate push remove start status what-changed
                            ;;
                (demo)      compadd "$@" help list merge-feature update-features merge-demo push remove start status
                            ;;
                (hotfix)    compadd "$@" finish help list push remove start
                            ;;
                (release)   compadd "$@" committers finish merge-demo help list push remove reset start
                            ;;
                (tag)       compadd "$@" help list
                            ;;
            esac
            ;;
        (option)
            case $words[2] in
                (feature)
                    case $words[3] in
                        (committers)
                            compadd  $(git branch --no-color -r | grep "feature-" | sed 's/^[* ]*//' | sed 's#^origin/feature-##' | tr '\n' ' ')
                            ;;
                    esac
                    ;;
                (release)
                    case $words[3] in
                        (finish)
                            compadd  $(git branch --no-color -r | grep "release-" | sed 's/^[* ]*//' | sed 's#^origin/release-##' | tr '\n' ' ')
                            ;;
                    esac
                    ;;
            esac
        ;;
    esac
}

_twgit "$@"
