export _JDKMAN_SHELL=bash
[[ "$(uname -s)" != "Darwin" ]] && export _JDKMAN_ORIG_PATH="$PATH"
_JDKMAN_CURRENT_ENV_TAG=""

_jdkman_find_env_tag() {
  local dir="$PWD" content
  while [[ "$dir" != "/" ]]; do
    if [[ -f "$dir/.java-version" ]]; then
      content="$(<"$dir/.java-version")"
      if [[ -n "$content" ]]; then
        echo "$content"
        return
      fi
    fi
    dir="$(dirname "$dir")"
  done
  if [[ -f "$HOME/.config/jdkman/.java-version" ]]; then
    echo "$(<"$HOME/.config/jdkman/.java-version")"
  fi
}

_jdkman_hook() {
  local env_tag
  env_tag="$(_jdkman_find_env_tag)"
  if [[ "$env_tag" == "$_JDKMAN_CURRENT_ENV_TAG" ]]; then
    return
  fi
  _JDKMAN_CURRENT_ENV_TAG="$env_tag"
  if [[ -n "$env_tag" ]]; then
    if command -v jdk-hook-env &>/dev/null; then
      eval "$(jdk-hook-env "$env_tag" 2>/dev/null)"
    else
      eval "$(jdk hook-env "$env_tag" 2>/dev/null)"
    fi
  else
    unset JAVA_HOME
    [[ -n "${_JDKMAN_ORIG_PATH+x}" ]] && export PATH="$_JDKMAN_ORIG_PATH"
  fi
}

if [[ "$PROMPT_COMMAND" != *"_jdkman_hook"* ]]; then
  PROMPT_COMMAND="_jdkman_hook${PROMPT_COMMAND:+;$PROMPT_COMMAND}"
fi
