#!/bin/sh

set -e

newline='
'

pecho () { printf %s\\n "$*"; }
log () { pecho "$@"; }
error () { log "ERROR: $@" >&2; }
fatal () { error "$@"; exit 1; }

mydir=$(cd "${0%/*}" && pwd -P) || exit 1
cd "${mydir}/../../.."
pdir=$(cd .. && pwd -P) || exit 1

plugins=$("${mydir}/listOfficialPlugins") || exit 1
for d in ${plugins}; do
  log "============================================================"
  log "${d}"
  log "============================================================"
  fd=${pdir}/${d}
  repo=git@github.com:ether/${plugin}.git
  [ -d "${fd}" ] || {
    log "Cloning ${repo} to ${fd}..."
    (cd "${pdir}" && git clone "${repo}" "${d}") || exit 1
  } || exit 1
  log "Fetching latest commits..."
  (cd "${fd}" && git pull --ff-only) || exit 1
  log "Getting plugin name..."
  pn=$(cd "${fd}" && npx -c 'printf %s\\n "${npm_package_name}"') || exit 1
  [ -n "${pn}" ] || fatal "Unable to determine plugin name for ${d}"
  md=node_modules/${pn}
  [ -d "${md}" ] || {
    log "Installing plugin to ${md}..."
    ln -s ../../"${d}" "${md}"
  } || exit 1
  [ "${md}" -ef "${fd}" ] || fatal "${md} is not a symlink to ${fd}"
done
