#compdef wpg

_profiles() {
    local -a profiles               #
    profiles=(`wpg -l`)             # use output of wpg -l for completion
    _describe 'profiles' profiles   #
}

_templates() {
    local -a templates
    templates=(`wpg -xl`)
    _describe 'templates' templates
}

_backends() {
    local -a backends
    backends=(`wpg --backend`)
    _describe 'backends' backends
}

_wpg() {
    local state optforprofiles
    optforprofiles=(-s -e -d -z -m)    # options for which profiles should be completed
    optvariable=(-i -o)
    optforgeneric=(-y -a -xa)
    optfortemplates=(-xd -dx)
    optforbackends=(--backend)

    _arguments \
        '1: :->generic' \
        '*: :->listprofiles'

    case $state in
        (generic)
            _gnu_generic
            ;;
        (listprofiles)
            if [[ $CURRENT < 5 || ${words[2]} != "-s" ]]; then
                for opt in $optforprofiles; do
                    if [[ $opt = ${words[2]} ]]; then
                        _profiles
                    fi
                done
                for opt in $optvariable; do
                    if [[ $opt = ${words[2]} && $CURRENT < 4 ]]; then
                        _profiles
                    elif [[ $opt = ${words[2]} ]]; then
                        _gnu_generic
                    fi
                done
                for opt in $optforgeneric; do
                    if [[ $opt = ${words[2]} ]]; then
                        _gnu_generic
                    fi
                done
                for opt in $optfortemplates; do
                    if [[ $opt = ${words[2]} ]]; then
                        _templates
                    fi
                done
                for opt in $optforbackends; do
                    if [[ $opt = ${words[2]} ]]; then
                        _backends
                    fi
                done
            fi 
            ;;
    esac
}

_wpg "$@"
