#!/bin/bash

set -euo pipefail

vendor="${1}"
env="${2}"
region="${3}"
logical_region="${4}"
cluster="${5}"
isByoc="${6:-false}"
managedByOpsServer="${7:-false}"

if [ -z "$vendor" ] || [ -z "$env" ] || [ -z "$region" ] || [ -z "$logical_region" ] || [ -z "$cluster" ]; then
  echo "Error: Missing required arguments."
  echo "Usage: $0 <vendor> <env> <region> <logical_region> <cluster> [isByoc] [managedByOpsServer]"
  exit 1
fi

ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

file_path="${DEPLOY_GROUPS_FILE:-$ROOT/deploy-groups.txt}"
tmp_output="${file_path}.$$"
trap 'rm -f "$tmp_output"' EXIT

normalize_bool_string() {
  if [[ "$1" == "true" ]]; then
    echo "true"
  else
    echo "false"
  fi
}

normalized_is_byoc="$(normalize_bool_string "$isByoc")"
normalized_managed_by_ops_server="$(normalize_bool_string "$managedByOpsServer")"

jq \
  --arg env "$env" \
  --arg vendor "$vendor" \
  --arg region "$region" \
  --arg logical_region "$logical_region" \
  --arg cluster "$cluster" \
  --arg is_byoc "$normalized_is_byoc" \
  --arg managed_by_ops_server "$normalized_managed_by_ops_server" \
  '
  .[$env] |= (. // {}) |
  .[$env][$vendor] |= (. // []) |
  .[$env][$vendor] =
    (
      .[$env][$vendor]
      | map(select(.region != $region or .logical_region != $logical_region))
      + [({
          region: $region,
          logical_region: $logical_region,
          clusters: [$cluster],
          isByoc: $is_byoc,
          managedByOpsServer: $managed_by_ops_server
        })]
      | sort_by(.logical_region)
    )
  ' \
  "$file_path" >"$tmp_output"

mv "$tmp_output" "$file_path"
echo "registered $logical_region with managedByOpsServer=$normalized_managed_by_ops_server"
