#!/bin/bash
set -euo pipefail

# Increment this number to cause everyone's docs project to be reset on their next run
# This is so that we can somewhat automatically fix people's projects when the upstream docs project has a breaking change that requires resetting the project
RESET_VERSION=1

KIBANA_DIR=$(cd "$(dirname "$0")"/.. && pwd)
WORKSPACE=$(cd "$KIBANA_DIR/.." && pwd)/kibana-docs
export NVM_DIR="$WORKSPACE/.nvm"

DOCS_DIR="$WORKSPACE/docs.elastic.dev"

# These are the other repos with docs currently required to build the docs in this repo and not get errors
# For example, kibana docs link to docs in these repos, and if they aren't built, you'll get errors
DEV_DIR="$WORKSPACE/dev"
TEAM_DIR="$WORKSPACE/kibana-team"

cd "$KIBANA_DIR"
origin=$(git remote get-url origin || true)
GIT_PREFIX="git@github.com:"
if [[ "$origin" == "https"* ]]; then
  GIT_PREFIX="https://github.com/"
fi

mkdir -p "$WORKSPACE"
cd "$WORKSPACE"
touch "$WORKSPACE/.version"
RESET_VERSION_FROM_FILE=$(cat "$WORKSPACE/.version")

if [[ ! -d "$NVM_DIR" ]]; then
  echo "Installing a separate copy of nvm"
  git clone https://github.com/nvm-sh/nvm.git "$NVM_DIR"
  cd "$NVM_DIR"
  git checkout "$(git describe --abbrev=0 --tags --match "v[0-9]*" "$(git rev-list --tags --max-count=1)")"
  cd "$WORKSPACE"
fi
source "$NVM_DIR/nvm.sh"

if [[ ! -d "$DOCS_DIR" ]]; then
  echo "Cloning docs.elastic.dev repo..."
  git clone --depth 1 "${GIT_PREFIX}elastic/docs.elastic.dev.git"
else
  cd "$DOCS_DIR"
  git pull
  if [[ "$RESET_VERSION" != "$RESET_VERSION_FROM_FILE" ]]; then
    echo "Resetting docs.elastic.dev repo..."
    git clean -fdxq
  fi
  cd "$WORKSPACE"
fi

if [[ ! -d "$DEV_DIR" ]]; then
  echo "Cloning dev repo..."
  git clone --depth 1 "${GIT_PREFIX}elastic/dev.git"
else
  cd "$DEV_DIR"
  git pull
  cd "$WORKSPACE"
fi

if [[ ! -d "$TEAM_DIR" ]]; then
  echo "Cloning kibana-team repo..."
  git clone --depth 1 "${GIT_PREFIX}elastic/kibana-team.git"
else
  cd "$TEAM_DIR"
  git pull
  cd "$WORKSPACE"
fi

# The minimum sources required to build kibana docs
cat << EOF > "$DOCS_DIR/config/content-dev.js"
module.exports = {
  "content": {
    "sources": [
      {
        "type": "file",
        "location": "$KIBANA_DIR"
      },
      {
        "type": "file",
        "location": "$DEV_DIR"
      },
      {
        "type": "file",
        "location": "$TEAM_DIR"
      }
    ],
    "nav": {
      "structure": [
        {
          collection: 'Elastic Developer Guide',
          navs: ['nav-elastic-developer-guide'],
        },
        { collection: 'Kibana Team', navs: ['nav-kibana-team'] },
        { collection: 'Kibana Developer Guide', navs: ['nav-kibana-dev'] },
      ],
      "default": "nav-kibana-dev"
    }
  }
};
EOF

cd "$DOCS_DIR"
nvm install

if ! which yarn; then
  npm install -g yarn
fi

yarn

if [[ ! -d .docsmobile ]]; then
  yarn init-docs
fi

echo ""
echo "The docs.elastic.dev project is located at:"
echo "$DOCS_DIR"
echo ""

echo $RESET_VERSION > "$WORKSPACE/.version"

if [[ "${1:-}" ]]; then
  yarn "$@"
else
  yarn dev
fi
