#!/usr/bin/env bash

_dokku_complete_goals_fetch() {
  dokku --quiet help --all | awk '/^    /{ print $1 }' | sort > "/var/cache/dokku-completion"
}

_dokku_complete_verify() {
  declare desc="shows bash completion"
  declare COMMAND="$1"
  local COMMANDS=""

  if [[ ! -f "/var/cache/dokku-completion" ]] || [[ -s "/var/cache/dokku-completion" ]]; then
    _dokku_complete_goals_fetch
  fi    

  _dokku_complete_goals=$(cat "/var/cache/dokku-completion")

  while read -r fn; do
    if [[ -z "$COMMAND" ]] || [[ "$fn" == $COMMAND* ]]; then
      COMMANDS="${COMMANDS};${fn}"
    fi
  done <<< "$_dokku_complete_goals"

  echo "${COMMANDS#";"}"
}

have dokku &&
_dokku_complete() {
  local cur prev
  _get_comp_words_by_ref -n : cur
  opts=$(_dokku_complete_verify "${cur}")
  COMPREPLY=($(IFS=";" compgen -W "$opts" -- "$cur"))
  __ltrim_colon_completions "$cur"
} &&
complete -F _dokku_complete dokku

if [[ ! -f "/var/cache/dokku-completion" ]] || [[ -s "/var/cache/dokku-completion" ]]; then
  have dokku && export -f _dokku_complete_goals_fetch && nohup bash -c _dokku_complete_goals_fetch >/dev/null 2>&1 &
fi
