# appstream-util completion                               -*- shell-script -*-
#
# This file is part of libappstream-glib.
#
# Copyright 2014 Igor Gnatenko
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 2 of the License,
# or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

_appstream-util()
{
    local cur prev words cword
    _init_completion -s || return

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

    # 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 $prev in
        -h|--help|--version)
            return
            ;;
        *)
            ;;
    esac

    $split && return

    if [[ $command ]]; then

        case $command in
            validate|validate-relax|validate-strict)
                ext='@(@(appdata|metainfo).@(@(x|y)ml?(.in)|@(x|y)ml.gz))'
                ;;
            install|install-origin|uninstall)
                ext='@(@(appdata|metainfo).@(@(x|y)ml|@(x|y)ml.gz))'
                ;;
            dump)
                ext='@(desktop|@(appdata|metainfo).@(x|y)ml?(.in))'
                ;;
            upgrade)
                ext='@(appdata.xml?(.in))'
                ;;
            non-package-yaml|status-html|status-csv)
                ext='@(xml.gz)'
                ;;
            appdata-from-desktop)
                case $nth in
                    1)
                        ext='@(desktop?(.in))'
                        ;;
                    2)
                        COMPREPLY=( $( compgen -W '$( echo $prev | \
                            sed -e "s/desktop/appdata.xml/g" )' -- "$cur" ) )
                        ext=''
                        ;;
                esac
                ;;
            convert)
                case $nth in
                    1)
                        ext='@(@(x|y)ml.gz|appdata.@(x|y)ml?(.in))'
                        ;;
                    *)
                        ext=''
                        ;;
                esac
                ;;
            *)
                ;;
        esac
        [[ -n $ext ]] && _filedir $ext        
        return

    fi

    if [[ $cur == -* ]]; then
        COMPREPLY=( $( compgen -W '$( _parse_help "$1" )' -- "$cur" ) )
        [[ $COMPREPLY == *= ]] && compopt -o nospace
    elif [[ ! $command ]]; then
        COMPREPLY=( $( compgen -W '$( "$1" list-commands 2>/dev/null )' -- "$cur" ) )
    fi
} &&
complete -F _appstream-util appstream-util

# ex: ts=4 sw=4 et filetype=sh
