#!/usr/bin/env bash
rvm_base_except="selector"

source "$rvm_scripts_path/base"

rvm_docs_ruby_string="$(__rvm_env_string | awk -F"${rvm_gemset_separator:-"@"}" '{print $1}')"

if [[ "$rvm_docs_ruby_string" == "system" || -z "$rvm_docs_ruby_string" ]]; then

  rvm_error "Currently 'rvm docs ...' does not work with non-rvm rubies."

  exit 1

fi

rvm_docs_type="${rvm_docs_type:-rdoc}"

# Ensure we have the doc directories.
if [[ ! -d "${rvm_docs_path:-"$rvm_path/docs"}" ]] ; then

  mkdir -p "${rvm_docs_path:-"$rvm_path/docs"}/rdoc" "${rvm_docs_path:-"$rvm_path/docs"}/yard"

fi

usage()
{
  printf "

  Usage:

    rvm docs {open,generate,generate-ri,generate-rdoc}

"
  return 0
}

open_docs()
{
  if [[ -s "${rvm_docs_path:-"$rvm_path/docs"}/$rvm_docs_ruby_string/$rvm_docs_type/index.html" ]] ; then

    if command -v open >/dev/null ; then

      open "${rvm_docs_path:-"$rvm_path/docs"}/$rvm_docs_ruby_string/$rvm_docs_type/index.html"

    elif command -v xdg-open >/dev/null ; then

      xdg-open "${rvm_docs_path:-"$rvm_path/docs"}/$rvm_docs_ruby_string/$rvm_docs_type/index.html"

    else

      rvm_error "Neither open nor xdg-open were found, in order to open the docs one of these two are required. \n(OR you can let me know how else to open the html in your browser from comand line on your OS :) )"

    fi

  else

    rvm_error "$rvm_docs_type docs are missing, perhaps run 'rvm docs generate' first?"

  fi
}

generate_ri()
{
  # Generate ri docs
  (
    builtin cd "${rvm_src_path}/$rvm_docs_ruby_string/"

    rvm_log "Generating ri documentation, be aware that this could take a *long* time, and depends heavily on your system resources..."

    rvm_log "( Errors will be logged to ${rvm_log_path}/$rvm_docs_ruby_string/docs.log )"

    rdoc -a --ri-site > /dev/null 2>> ${rvm_log_path}/$rvm_docs_ruby_string/docs.log
  )
}

generate_rdoc()
{
  (
    builtin cd "${rvm_src_path}/$rvm_docs_ruby_string/"

    __rvm_rm_rf "${rvm_docs_path:-"$rvm_path/docs"}/$rvm_docs_ruby_string/$rvm_docs_type/"

    rvm_log "Generating rdoc documentation, be aware that this could take a *long* time, and depends heavily on your system resources..."

    rvm_log "( Errors will be logged to ${rvm_log_path}/$rvm_docs_ruby_string/docs.log )"

    if gem list | \grep ^hanna >/dev/null 2>&1; then

      hanna -o "${rvm_docs_path:-"$rvm_path/docs"}/$rvm_docs_ruby_string/$rvm_docs_type" --inline-source --line-numbers --fmt=html > /dev/null 2>> "${rvm_log_path}/$rvm_docs_ruby_string/docs.log"

    else

      rdoc -a -o "${rvm_docs_path:-"$rvm_path/docs"}/$rvm_docs_ruby_string/$rvm_docs_type" > /dev/null 2>> "${rvm_log_path}/$rvm_docs_ruby_string/docs.log"

    fi
  )
}

args=($*)
action="${args[0]}"
args=($(echo ${args[@]:1})) # Strip trailing / leading / extra spacing.

case "$action" in
  generate)
    generate_ri
    generate_rdoc
    ;;
  open)          open_docs      ;;
  generate-ri)   generate_ri    ;;
  generate-rdoc) generate_rdoc  ;;
  help)          usage          ;;
  *)             usage ; exit 1 ;;
esac

exit $?
