function __quicknav_cd() {
  cd "$@"
}

function __quicknav_nav() {
  if [ "$#" -eq 0 ]; then
    quicknav --help
    return 0

  elif [[ "$1" == "-"* ]]; then
    if [[ "$1" == "--help" ]] || [[ "$1" == "-h" ]]; then
      local __quicknav_version
      local __quicknav_version_raw
      __quicknav_version_raw=($(quicknav -V))
      __quicknav_version=${__quicknav_version_raw[2]}

      echo -e "nav (quicknav helper) $__quicknav_version\n"
      echo -e "USAGE:\n    nav <shortcut>\n"
      echo -e "FLAGS:\n    -h, --help      Prints help information\n    -V, --version   Prints version information\n"
      echo -e "DESCRIPTION:\n    This is the quicknav helper. It is responsible for handling the actual navigation part."
      echo -e "    For more commands (not just the jumping around), check out the quicknav command for more options."
      return 0

    elif [[ "$1" == "--version" ]] || [[ "$1" == "-V" ]]; then
      local __quicknav_version
      local __quicknav_version_raw
      __quicknav_version_raw=($(quicknav -V))
      __quicknav_version=${__quicknav_version_raw[2]}

      echo -e "nav (quicknav helper) $__quicknav_version"
      return 0

    else
      echo -e "\033[0;31merror:\033[0m Found argument '\033[0;33m$1\033[0m' which is not valid.\n"
      echo -e "USAGE:\n    nav <shortcut>\n"
      echo -e "For more information try \033[0;32m--help\033[0m"
      return 1
    fi

  else
    local __quicknav_result
    __quicknav_result="$(quicknav get "$@")"

    if [ $? -eq 0 ]; then
      __quicknav_cd "$__quicknav_result"
      return 0
    else
      echo -e "$__quicknav_result"
      return 1
    fi
  fi
}

function nav() {
  __quicknav_nav "$@"
}
