#!/bin/bash
set -euo pipefail

ROOT=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd)
source "${ROOT}/lib.sh"

env=$1
name=$2
region=$3
tf_oss_bucket=$4
preview=$5
output_uri=$6

tf_oss_region=$(get_oss_bucket_region "oss://${tf_oss_bucket}")
output_bucket_endpoint=$(get_oss_bucket_endpoint "$output_uri")

action="apply -auto-approve"
if [[ "$preview" == "true" ]]; then
  action="plan"
fi

ROOT=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd)
tf_directory="${ROOT}/alicloud"
tf_state="region-shared-resoruces/ng-rds/${env}-${region}-${name}.json"

cd "${tf_directory}"

terraform init -backend-config="bucket=${tf_oss_bucket}" -backend-config="region=${tf_oss_region}" -backend-config="key=${tf_state}"
terraform ${action} -var="env=${env}" -var="name=${name}" -var="region=${region}"

if [[ "$preview" == "true" ]]; then
  echo "Preview completed. No changes applied."
  exit 0
fi

output_command="terraform output -json"
rds_connection_string=$(eval $output_command | jq '.connection_string')

local_output="/tmp/ng-rds-output.yaml"
terraform output -json | yq 'with_entries({"key": .key, "value": .value.value})' -oyaml -P > "${local_output}"
echo "Write output to oss..."
cat ${local_output}
aliyun oss cp "${local_output}" "${output_uri}" --endpoint=$output_bucket_endpoint -f