#!/usr/bin/env bash

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

declare -A cloud_to_cluster_type=(
    [aws]=eks
    [gcp]=gke
    [azure]=aks
    [alicloud]=ack
)
provider=${cloud_to_cluster_type[${cloud}]}

additional_args=$(jq -r '.' "${json_file_path}")
echo "additional_args: ${additional_args}"

vector_role_arn=$(echo ${additional_args} | jq -r '.vectorRoleARN')
cluster_name=$(echo ${additional_args} | jq -r '.clusterName')
log_bucket_name=$(echo ${additional_args} | jq -r '.logBucketName')
storage_account_name=$(echo ${additional_args} | jq -r '.storageAccountName')
assume_o11y_role=$(echo ${additional_args} | jq -r '.assumeO11yRole')
cluster_identity="seed/${provider}/${logical_region_name}" # seed/eks/us-east-1
o11y_id=$(echo ${additional_args} | jq -r '.o11yId')
o11y_endpoint_service_dns_name=$(echo ${additional_args} | jq -r '.o11yEndpointServiceDNSName')
image_registry=$(echo ${additional_args} | jq -r '.imageRegistry')
tenant_id=$(echo ${additional_args} | jq -r '.tenantId')
project_id=$(echo ${additional_args} | jq -r '.projectId')

if [[ "$OSTYPE" == "darwin"* ]]; then
  if ! [ -x "$(command -v gsed)" ]; then
    echo "Error: 'gsed' is not installed." >&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

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

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

mkdir -p "${deploy_dir}"
echo "Prepare manifest files"
cp "${variant_dir}/${cloud}_vector_values_tmpl.yaml" "${deploy_dir}/vector-values.yaml"
cp "${variant_dir}/${cloud}_vmagent_tmpl.yaml" "${deploy_dir}/vmagent.yaml"

find "${deploy_dir}" -type f -exec ${SED_CMD} -i "s|TMPL_VECTOR_ROLE_ARN|${vector_role_arn}|g" {} \;
find "${deploy_dir}" -type f -exec ${SED_CMD} -i "s|TMPL_CLUSTER_NAME|${cluster_name}|g" {} \;
find "${deploy_dir}" -type f -exec ${SED_CMD} -i "s|TMPL_ENV|${env}|g" {} \;
find "${deploy_dir}" -type f -exec ${SED_CMD} -i "s|TMPL_REGION|${region}|g" {} \;
find "${deploy_dir}" -type f -exec ${SED_CMD} -i "s|TMPL_LOGICAL_REGION|${logical_region_name}|g" {} \;
find "${deploy_dir}" -type f -exec ${SED_CMD} -i "s|TMPL_CLUSTER_IDENTITY|${cluster_identity}|g" {} \;
find "${deploy_dir}" -type f -exec ${SED_CMD} -i "s|TMPL_ASSUME_O11Y_ROLE|${assume_o11y_role}|g" {} \;
find "${deploy_dir}" -type f -exec ${SED_CMD} -i "s|TMPL_LOG_BUCKET_NAME|${log_bucket_name}|g" {} \;
find "${deploy_dir}" -type f -exec ${SED_CMD} -i "s|TMPL_STORAGE_ACCOUNT_NAME|${storage_account_name}|g" {} \;
find "${deploy_dir}" -type f -exec ${SED_CMD} -i "s|TMPL_TENANT_ID|${tenant_id}|g" {} \;
find "${deploy_dir}" -type f -exec ${SED_CMD} -i "s|TMPL_PROJECT_ID|${project_id}|g" {} \;
find "${deploy_dir}" -type f -exec ${SED_CMD} -i "s|TMPL_IMAGE_REGISTRY|${image_registry}|g" {} \;
find "${deploy_dir}" -type f -exec ${SED_CMD} -i "s|TMPL_PROVIDER|${provider}|g" {} \;
find "${deploy_dir}" -type f -exec ${SED_CMD} -i "s|TMPL_O11Y_ID|${o11y_id}|g" {} \;
find "${deploy_dir}" -type f -exec ${SED_CMD} -i "s|TMPL_O11Y_ENDPOINT_SERVICE_DNS_NAME|${o11y_endpoint_service_dns_name}|g" {} \;
find "${deploy_dir}" -type f -exec ${SED_CMD} -i "s|TMPL_VENDOR|${cloud}|g" {} \;
