#!/usr/bin/env bash

set -e

main() {
  # setup using globals, defaulting where globals are not defined, assuming gitlab env values for further defaults
  local CHECK_BRANCH_NAME="${CHECK_BRANCH_NAME-${CI_DEFAULT_BRANCH-trunk}}"
  local CHECK_REMOTE_NAME="${CHECK_REMOTE_NAME-${CI_REMOTE_NAME-origin}}"
  local CHECK_BRANCH="${CHECK_BRANCH-${CHECK_REMOTE_NAME}/${CHECK_BRANCH_NAME}}"

  local BR="${CHECK_BRANCH}"
  local PJ="${CHECK_PACKAGE_JSON-./package.json}"
  local PREV_PJSON=
  local V_NOW=
  local V_PREV=
  local V_SEL=${CHECK_VERSION_SELECTOR-.version}

  if PREV_PJSON="$(git show ${BR}:${PJ} 2>&1)"; then
    if V_PREV="$(node -p "(${PREV_PJSON})${V_SEL}")"; then
      >&2 echo "Found previous version ${V_PREV}"
    else
      >&2 echo "Could not find a previous package.json version in JSON ${PREV_PJSON}"

      return 1
    fi
  else
    # TODO after fixing whatever this bug is, I should probably should default to some invalid version like -1
    >&2 echo "Could not find a previous package.json using git show ${BR}:${PJ}"

    return 1
  fi

  if V_NOW="$(node -p "require('${PJ}')${V_SEL}")"; then
    >&2 echo "Found new version ${V_NOW}"
  else
    >&2 echo "Could not find a current version in ${PJ}"

    return 1
  fi

  if [ "${V_PREV}" != "${V_NOW}" ]; then
    echo >&2 "Version changed! (${V_PREV}->${V_NOW}) Great Success!"

    return 0
  else
    echo >&2 "Version unchanged, :(. (${V_PREV}=${V_NOW})"

    return 1
  fi
}

main "$@"
