#!/usr/bin/env bash
set -euo pipefail
# When changing this script, remember to modify the corresponding github action
region=${1}
env=${2}
cloud=${3}
json_file_path=${4}
logicalRegionName=${5}

# Ensure jq is installed
if ! command -v jq &> /dev/null; then
    echo "jq could not be found. Please install jq to continue."
    exit 1
fi

crossplane_azure_tenant_id=$(jq -r '.crossplane_azure_tenant_id // ""' "${json_file_path}")
crossplane_azure_client_id=$(jq -r '.crossplane_azure_client_id // ""' "${json_file_path}")
azure_workload_identity_client_id=$(jq -r '.azure_workload_identity_client_id // ""' "${json_file_path}")
crossplane_aws_assume_role_name=$(jq -r '.crossplane_aws_assume_role_name // ""' "${json_file_path}")
crossplane_aws_assume_role_external_id=$(jq -r '.crossplane_aws_assume_role_external_id // ""' "${json_file_path}")
irsa_role_arn=$(jq -r '.irsa_role_arn // ""' "${json_file_path}")
image_registry=$(jq -r '.imageRegistry // ""' "${json_file_path}")
gcp_service_account=$(jq -r '.gcpServiceAccount // ""' "${json_file_path}")
if [[ "$cloud" == gcp && -z "$gcp_service_account" ]]; then
  echo "gcpServiceAccount is required for GCP TiCDC" >&2; exit 1
fi

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

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

echo "Prepare manifest files"
cp "${variant_dir}/kustomization_tmpl.yaml" "${deploy_dir}/kustomization.yaml"
cp "${variant_dir}/version.yaml" "${deploy_dir}/version.yaml"
cp "${variant_dir}/config_tmpl.yaml" "${deploy_dir}/config.yaml"
cp "${variant_dir}/serviceaccount_tmpl.yaml" "${deploy_dir}/serviceaccount.yaml"

# https://stackoverflow.com/questions/4247068/sed-command-with-i-option-failing-on-mac-but-works-on-linux
if [[ "$OSTYPE" == "darwin"* ]]; then
  # Require gnu-sed.
  if ! [ -x "$(command -v gsed)" ]; then
    echo "Error: 'gsed' is not istalled." >&2
    echo "If you are using Homebrew, install with 'brew install gnu-sed'." >&2
    exit 1
  fi
  SED_CMD=gsed
else
  SED_CMD=sed
fi

${SED_CMD} -i "s|REGION|${region}|g" "${deploy_dir}/config.yaml"
${SED_CMD} -i "s|AZURE_WORKLOAD_IDENTITY_CLIENT_ID|${azure_workload_identity_client_id}|g" "${deploy_dir}/serviceaccount.yaml"
${SED_CMD} -i "s|CROSSPLANE_AZURE_TENANT_ID|${crossplane_azure_tenant_id}|g" "${deploy_dir}/config.yaml"
${SED_CMD} -i "s|CROSSPLANE_AZURE_CLIENT_ID|${crossplane_azure_client_id}|g" "${deploy_dir}/config.yaml"
${SED_CMD} -i "s|ASSUME_ROLE_NAME|${crossplane_aws_assume_role_name}|g" "${deploy_dir}/config.yaml"
${SED_CMD} -i "s|ASSUME_ROLE_EXTERNAL_ID|${crossplane_aws_assume_role_external_id:-"123"}|g" "${deploy_dir}/config.yaml"
${SED_CMD} -i "s|IRSA_ROLE_ARN|${irsa_role_arn}|g" "${deploy_dir}/serviceaccount.yaml"
${SED_CMD} -i "s|IMAGE_REGISTRY|${image_registry}|g" "${deploy_dir}/version.yaml"
${SED_CMD} -i "s|IMAGE_REGISTRY|${image_registry}|g" "${deploy_dir}/config.yaml"
${SED_CMD} -i "s|GCP_SERVICE_ACCOUNT_PLACEHOLDER|${gcp_service_account}|g" "${deploy_dir}/serviceaccount.yaml"
