#!/usr/bin/env bash
set -euo pipefail
# When changing this script, remember to modify the corresponding github action
region=${1}
env=${2}
cloud=${3}
aws_role_arn=${4}
logicalRegionName=${5}
ali_role_arn=${6}
ali_oidc_provider_arn=${7}
azure_vault_url=${8:-}
azure_client_id=${9:-}
azure_tenant_id=${10:-}

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

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

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

mkdir -p "${deploy_dir}"
echo "Prepare manifest files"

if [ "${cloud}" == "aws" ]; then
  cp "${variant_dir}/kustomization_tmpl.yaml" "${deploy_dir}/kustomization.yaml"
  cp "${variant_dir}/secretstore_tmpl.yaml" "${deploy_dir}/secretstore.yaml"
  cp "${variant_dir}/serviceaccount_tmpl.yaml" "${deploy_dir}/serviceaccount.yaml"

  ${SED_CMD} -i "s|REGION|${region}|g" "${deploy_dir}/secretstore.yaml"
  ${SED_CMD} -i "s|ROLE_ARN|${aws_role_arn}|g" "${deploy_dir}/serviceaccount.yaml"

elif [ "${cloud}" == "alicloud" ]; then
  cp "${variant_dir}/kustomization_tmpl.yaml" "${deploy_dir}/kustomization.yaml"
  cp "${variant_dir}/secretstore_tmpl.yaml" "${deploy_dir}/secretstore.yaml"

  ${SED_CMD} -i "s|REGION|${region}|g" "${deploy_dir}/secretstore.yaml"
  ${SED_CMD} -i "s|ROLE_ARN|${ali_role_arn}|g" "${deploy_dir}/secretstore.yaml"
  ${SED_CMD} -i "s|OIDC_PROVIDER_ARN|${ali_oidc_provider_arn}|g" "${deploy_dir}/secretstore.yaml"
elif [ "${cloud}" == "azure" ]; then
  cp "${variant_dir}/kustomization_tmpl.yaml" "${deploy_dir}/kustomization.yaml"
  cp "${variant_dir}/secretstore_tmpl.yaml" "${deploy_dir}/secretstore.yaml"
  cp "${variant_dir}/serviceaccount_tmpl.yaml" "${deploy_dir}/serviceaccount.yaml"

  ${SED_CMD} -i "s|VAULT_URL|${azure_vault_url}|g" "${deploy_dir}/secretstore.yaml"
  ${SED_CMD} -i "s|CLIENT_ID|${azure_client_id}|g" "${deploy_dir}/serviceaccount.yaml"
  ${SED_CMD} -i "s|TENANT_ID|${azure_tenant_id}|g" "${deploy_dir}/serviceaccount.yaml"
else
  echo "Unsupported cloud provider: ${cloud}"
  exit 1
fi
