#!/usr/bin/env bash
set -euo pipefail
# When changing this script, remember to modify the corresponding github action
# usage: deploy-new-region.sh <logicalRegionName> <env> <cloud> <args.json>
#
# deploy_dir:  envs/${env}-${logicalRegionName}   # NO gcp- prefix
# variant_dir: variants/${env}
#
# args.json optional keys:
#   gcpXpProviderSA  - override iam.gke.io/gcp-service-account on serviceaccount.yaml
#   gcpUpsSA         - override iam.gke.io/gcp-service-account on upstream-serviceaccount.yaml

if [ $# -lt 4 ]; then
  echo "usage: deploy-new-region.sh <logicalRegionName> <env> <cloud> <args.json>" >&2
  exit 1
fi

logicalRegionName=${1}
env=${2}
cloud=${3}
args_file_path=${4}

if [ "${cloud}" != "gcp" ]; then
  echo "This component is GCP-only; got cloud=${cloud}" >&2
  exit 1
fi

if [ ! -s "${args_file_path}" ]; then
  additional_args='{}'
else
  additional_args=$(jq -c 'if type == "string" then (fromjson? // .) else . end' "${args_file_path}")
  if [ -z "${additional_args}" ] || [ "${additional_args}" = "null" ] || [ "${additional_args}" = '""' ]; then
    additional_args='{}'
  fi
  if ! echo "${additional_args}" | jq -e 'type == "object"' >/dev/null 2>&1; then
    additional_args='{}'
  fi
fi
echo "additional_args: ${additional_args}"

gcp_xp_provider_sa=$(echo "${additional_args}" | jq -r '.gcpXpProviderSA // empty')
gcp_ups_sa=$(echo "${additional_args}" | jq -r '.gcpUpsSA // empty')

ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
deploy_dir="${ROOT}/envs/${env}-${logicalRegionName}"
variant_dir="${ROOT}/variants/${env}"

if [ ! -d "${variant_dir}" ]; then
  echo "Variant directory does not exist: ${variant_dir}" >&2
  exit 1
fi

if [ -e "${deploy_dir}" ]; then
  echo "New region deploy directory already exist"
  exit 1
fi

mkdir "${deploy_dir}"
echo "Prepare manifest files"
shopt -s nullglob
copied=0
for src in "${variant_dir}"/*; do
  [[ -f "${src}" ]] || continue
  filename=$(basename "${src}")
  filename="${filename/_tmpl/}"
  cp "${src}" "${deploy_dir}/${filename}"
  copied=$((copied + 1))
done
if [ "${copied}" -eq 0 ]; then
  echo "No variant files found in ${variant_dir}" >&2
  exit 1
fi

if [[ "$OSTYPE" == "darwin"* ]]; then
    # macOS
    SED_IN_PLACE=(-i '')
else
    # Linux and others
    SED_IN_PLACE=(-i)
fi

if [ -n "${gcp_xp_provider_sa}" ]; then
  sed "${SED_IN_PLACE[@]}" "s|iam.gke.io/gcp-service-account: .*|iam.gke.io/gcp-service-account: ${gcp_xp_provider_sa}|g" "${deploy_dir}/serviceaccount.yaml"
fi
if [ -n "${gcp_ups_sa}" ]; then
  sed "${SED_IN_PLACE[@]}" "s|iam.gke.io/gcp-service-account: .*|iam.gke.io/gcp-service-account: ${gcp_ups_sa}|g" "${deploy_dir}/upstream-serviceaccount.yaml"
fi
