#!/usr/bin/env bash
#-------------------------------------------------
# 实现bash补全功能
# @author yeahoo2000@gmail.com
#-------------------------------------------------

_game_sh_competion(){
    COMPREPLY=()
    local curr="${COMP_WORDS[COMP_CWORD]}"
    local prev="${COMP_WORDS[COMP_CWORD-1]}"
    local path="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

    # 获取匹配信息
    local s=$(${path}/game.sh completion)
    eval "declare -A doc=${s#*=}"

    # 处理当前输入的字符，转换成函数名
    local name=""
    unset COMP_WORDS[0]
    for arg in ${COMP_WORDS[@]}; do
        name="${name}_${arg}"
    done
    name=${name:1}

    local OLDIFS="$IFS"
    local IFS=$'\n'
    COMPREPLY=($(
        for k in ${!doc[@]}; do
            if [[ $k == $prev ]]; then
                continue
            fi
            if [[ "$name" == "" ]] || [[ $k == ${name}* ]]; then
                local sp=$(eval "printf ' %.0s' {1..$((26 - ${#k}))}")
                printf "%-*s\n" "$COLUMNS" "$k$sp${doc[$k]}"
            fi
        done
    ))
    IFS="$OLDIFS"

    if [[ ${#COMPREPLY[*]} -eq 1 ]]; then
        COMPREPLY=( ${COMPREPLY[0]%% *} )
    fi
    return 0
}

# 注册触发条件
complete -F _game_sh_competion dev.sh
