#!/usr/bin/env bash

# Creates `./util/README.md` and `./Documentation/Util.md` of description files
# in `./util` subdirectories
#
# Execute from root of project.  Example:
# `util/util_readme/util_readme.sh`

UTIL_README_DIR="$(cd "$(dirname "$0")" || exit; pwd -P)"
UTIL_DIR=$(dirname "$UTIL_README_DIR")
COREBOOT_ROOT_DIR=$(dirname "$UTIL_DIR")
DOCMENTATION_DIR="$COREBOOT_ROOT_DIR/Documentation"
SUMMARY='
## List of utils

_Scripts and programs found in the coreboot `./util` directory_
'
APPEND_TO_UTIL_MD="${UTIL_README_DIR}/post_util.md"

DESCRIPTION_FILES=$(find "$UTIL_DIR" -name "description.md" | sort)

echo -n "" > "$UTIL_DIR/README.md"
{
  echo
  echo "[//]: # ( DO NOT EDIT - AUTOGENERATED FILE )";
  echo
  echo "[//]: # ( RUN 'util/util_readme/util_readme.sh' to regenerate )";
  echo;
  echo "# Utilities";
  echo "${SUMMARY}"
} > "${DOCMENTATION_DIR}/util.md"

for DESC_FILE in $DESCRIPTION_FILES; do
  UTIL_NAME=$(echo "$DESC_FILE" | rev | cut -d '/' -f2 | rev)
  DESC=$(cat "$DESC_FILE")

  if [[ $DESC == "__"${UTIL_NAME}* || $DESC == "__["${UTIL_NAME}* ]]; then
    DESC="* $DESC"
  else
    DESC="* __${UTIL_NAME}__ - $DESC"
  fi

  # format description to under 72 characters per line and only
  # breaking on whitespace
  DESC=$(echo "$DESC" \
      | tr '\r\n' ' '  \
      | sed 's/  [*]\+/\n\t\*/g' \
      | sed 's/  \+/ /g' \
      | fold -s -w72 \
      | sed 's/\s*$//')

  echo "$DESC" >> "$UTIL_DIR/README.md"
  echo "$DESC" >> "$DOCMENTATION_DIR/util.md"
done

cat "${APPEND_TO_UTIL_MD}" >> "${DOCMENTATION_DIR}/util.md"
