#!/usr/bin/env bash
set -euo pipefail

script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
project_dir="$(cd "${script_dir}/.." && pwd)"
dist_dir="${project_dir}/dist"
staging_dir="$(mktemp -d "${TMPDIR:-/tmp}/jsm-production-v2.XXXXXX")"

cleanup() {
  rm -rf "${staging_dir}"
}
trap cleanup EXIT

rm -rf "${dist_dir}"
mkdir -p "${dist_dir}"

package_with_shared_config() {
  local source_name="$1"
  local artifact_name="$2"
  shift 2
  local package_dir="${staging_dir}/${artifact_name}"

  mkdir -p "${package_dir}/${source_name}" "${package_dir}/shared"
  for runtime_file in "$@"; do
    cp "${project_dir}/${source_name}/${runtime_file}" "${package_dir}/${source_name}/"
  done
  cp "${project_dir}/shared/channel-config.js" "${package_dir}/shared/"
  cp "${project_dir}/shared/channel-config.json" "${package_dir}/shared/"
  (
    cd "${package_dir}"
    zip -qr "${dist_dir}/${artifact_name}.zip" .
  )
}

package_standalone() {
  local source_name="$1"
  local artifact_name="$2"
  shift 2
  local package_dir="${staging_dir}/${artifact_name}"

  mkdir -p "${package_dir}/${source_name}"
  for runtime_file in "$@"; do
    cp "${project_dir}/${source_name}/${runtime_file}" "${package_dir}/${source_name}/"
  done
  (
    cd "${package_dir}"
    zip -qr "${dist_dir}/${artifact_name}.zip" .
  )
}

package_with_shared_config "slack-bot" "slack-bot-v2" \
  adf-to-slack.js app.js cluster-options.js config.js http-event.js lake-options.js \
  request-fields.json slack-links.js slack-modals.js ticket-routing.js
package_with_shared_config "lark-bot" "lark-support-bot-v2" \
  adf-inline.js app.js config.js jsmHandler.js lark-lake-card.js lark-media.js request-fields.json \
  ticket-routing.js utils.js
package_standalone "create-issue-handler" "CreateJsmIssueHandler-v2" \
  index.js reporter-log.js request-creation.js snapshot-payload.js
package_standalone "org-sync" "jsm-orgs-lambda-v2" \
  index.js org-sync-config.js runtime-config.js sync.js

layer_dir="${staging_dir}/jsm-production-v2-dependencies"
mkdir -p "${layer_dir}/nodejs"
cp "${project_dir}/layer/nodejs/package.json" "${layer_dir}/nodejs/"
cp "${project_dir}/layer/nodejs/package-lock.json" "${layer_dir}/nodejs/"
npm ci --omit=dev --ignore-scripts --prefix "${layer_dir}/nodejs"
(
  cd "${layer_dir}"
  zip -qr "${dist_dir}/jsm-production-v2-dependencies.zip" nodejs
)

printf 'Built production v2 artifacts in %s\n' "${dist_dir}"
