# bash completion for vnx 
# 
# This file is part of VNX package.
#
# Authors: David Fernández (david@dit.upm.es)
# Copyright (C) 2014-16 DIT-UPM
#           Departamento de Ingenieria de Sistemas Telematicos
#           Universidad Politecnica de Madrid
#           SPAIN
#
# This file is released under GPL-2, or later.
#

_vnx() 
{
    local cur prev line opts

    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    line=${COMP_LINE}
    opts="--define --undefine --start --create -t --shutdown -d --destroy -P --modify -m --scenario -s --save --restore --suspend --resume --reboot --reset --recreate --execute -x --exe-cli --show-map --show-status --console --console-info --exe-info --clean-host --create-rootfs --modify-rootfs --download-rootfs --install-media --update-aced --mem --yes -y --rootfs-type --help -h -v -vv -vvv --version -V -f -c -T --config -C -M -i -g --user -u -4 -6 -D --no-console -n --intervm-delay --h2vm-timeout -e -w -F -B -o -Z -b --arch --vcpu --kill -k --pack --unpack --include-rootfs -r --pack-external-rootfs --pack-status --pack-version --pack-add-files --validate-xml --skip-cloudinit --ignore-ext"

    #echo 
    #echo cur=${cur}
    #echo prev=${prev}
    #echo line=${line}

    if [[ ${cur} == -* ]] ; then
        COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
        return 0
    else
        case "$prev" in
        --arch)          pars='i686 x86_64'
                         COMPREPLY=( $(compgen -W "${pars}" -- ${cur}) )
                         ;;
        --show-map)      pars='svg png'
                         COMPREPLY=( $(compgen -W "${pars}" -- ${cur}) )
                         ;;
        --console)       pars='con0 con1'
                         COMPREPLY=( $(compgen -W "${pars}" -- ${cur}) )
                         ;;
        --rootfs-type)   pars='libvirt-kvm lxc'
                         COMPREPLY=( $(compgen -W "${pars}" -- ${cur}) )
                         ;;
        --vcpu)          nproc=`nproc`
                         pars=`eval echo {1..$nproc}`
                         COMPREPLY=( $(compgen -W "${pars}" -- ${cur}) )
                         ;;
        -f)              _filedir '@(xml)'
                         #xpat='!*.xml'
                         #COMPREPLY=( $(compgen -f -o dirnames -o nospace -X "${xpat}" -- ${cur}) )
                         ;;
        -C)              _filedir '@(conf)'
                         ;;
        -T)              _filedir -d
                         ;;
        -c)              _filedir -d
                         ;;
        --update-aced)   _filedir '@(tgz)'
                         ;;
        -e|--create-rootfs|--install-media)
                         _filedir
                         ;;
        --execute|-x)    if [[ $line == *"-f"* ]]; then
                            scenario_opt=`echo $line | awk '{ for (x=1;x<=NF;x++) if ($x~"-f") print $x " " $(x+1) }'`
                            moption=`echo $line | awk '{ for (x=1;x<=NF;x++) if ($x~"-M") print $x " " $(x+1) }'`
                            scenario=(${scenario_opt// / })
                            #pars=${scenario[1]}
                            if [ -r ${scenario[1]} ]; then
                                pars=`sudo vnx $scenario_opt $moption --exe-info -b | xargs -n1 | sort -u | xargs`
                                COMPREPLY=( $(compgen -W "${pars}" -- ${cur}) )
                            fi
                         elif [[ $line == *" -s "* || $line == *" --scenario "* ]]; then
                            scenario_opt=`echo $line | awk '{ for (x=1;x<=NF;x++) if ($x~"-s" || $x~"--scenario") print $x " " $(x+1) }'`
                            moption=`echo $line | awk '{ for (x=1;x<=NF;x++) if ($x~"-M") print $x " " $(x+1) }'`
                            pars=`sudo vnx $scenario_opt $moption --exe-info -b | xargs -n1 | sort -u | xargs`
                            COMPREPLY=( $(compgen -W "${pars}" -- ${cur}) )

                            #vnx_dir=$( cat /etc/vnx.conf | grep "^vnx_dir" | sed -e 's/vnx_dir=//' )
                            #scenario_dir=$( eval echo "$vnx_dir/scenarios/${scenario[1]}" )
                            #scenario_file=$( ls "$scenario_dir/${scenario[1]}.xml" )
                         fi
                         ;;
        --modify-rootfs) _filedir
                         ;;
        --pack)          _filedir '@(xml)'
                         ;;
        --unpack)        _filedir '@(tgz)'
                         ;;
        --modify)        _filedir '@(xml)'
                         ;;
        
        esac
    fi
}

complete -F _vnx vnx
