_cuckoo_completion()
{
    local compopt current prev optlist

    current="${COMP_WORDS[$COMP_CWORD]}"
    
    prev="${COMP_WORDS[$COMP_CWORD - 1]}"

    compopt=""

    optlist="--help -h \
             --run -r \
             --inject -i \
             --no-inject -j \
             --list-preset-apps -l \
             --namespace -n \
             --version -v"

    if [[ "${current}" =~ ^- ]]; then
        compopt=$optlist
    else
        case "${prev}" in
            --run|-r)
                compopt="\"program [options]\""
                ;;

            --inject|-i)
                compopt=""
                ;;

            --no-inject|-j)
                compopt=""
                ;;

            --list-preset-apps|-l)
                compopt=""
                ;;

            --namespace|-n)
                compopt="namespace"
                ;;

            --help|-h)
                compopt=""
                ;;

            --version|-v)
                compopt=""
                ;;

            *)
                ;;
        esac
    fi

    COMPREPLY=($(compgen -W "${compopt}" -- ${current}))

    return 0
}

complete -F _cuckoo_completion cuckoo
