#!/bin/bash
set -euo pipefail

ENV="$1"
WORKSPACE=$(unset CDPATH && cd $(dirname "${BASH_SOURCE[0]}") && pwd)
DEPLOY_GROUPS="$WORKSPACE/../../deploy-groups.txt"

echo "prepare logscheck config for environment: $ENV"
CONFIG_FILE=$WORKSPACE/../../../build/bin/logscheck_config.yaml
cp $WORKSPACE/logscheck_config_${ENV}_template.yaml $CONFIG_FILE

echo "Updating logscheck config with regions from deploy-groups.txt for environment: $ENV"

# Function to extract regions for a provider
extract_regions() {
  local provider="$1"
  jq -r --arg env "$ENV" --arg provider "$provider" \
    '.[$env][$provider][]?.logical_region // empty' "$DEPLOY_GROUPS" | \
    grep -v '^$' || true
}

# Function to create yq array from regions
create_yq_array() {
  local regions=()
  while IFS= read -r region; do
    [[ -n "$region" ]] && regions+=("\"$region\"")
  done

  if [ ${#regions[@]} -eq 0 ]; then
    echo "[]"
  else
    echo "[$(IFS=,; echo "${regions[*]}")]"
  fi
}

# Extract regions for each provider
AWS_REGIONS_LIST=$(extract_regions "aws")
GCP_REGIONS_LIST=$(extract_regions "gcp")
AZURE_REGIONS_LIST=$(extract_regions "azure")
ALICLOUD_REGIONS_LIST=$(extract_regions "alicloud")

# Convert to yq arrays
AWS_ARRAY=$(echo "$AWS_REGIONS_LIST" | create_yq_array)
GCP_ARRAY=$(echo "$GCP_REGIONS_LIST" | create_yq_array)
AZURE_ARRAY=$(echo "$AZURE_REGIONS_LIST" | create_yq_array)
ALICLOUD_ARRAY=$(echo "$ALICLOUD_REGIONS_LIST" | create_yq_array)

# Update the config file using yq
yq -i ".region.region.aws = $AWS_ARRAY" "$CONFIG_FILE"
yq -i ".region.region.gcp = $GCP_ARRAY" "$CONFIG_FILE"

# Only add azure/alicloud if they have regions
if [ "$AZURE_ARRAY" != "[]" ]; then
  yq -i ".region.region.azure = $AZURE_ARRAY" "$CONFIG_FILE"
fi

if [ "$ALICLOUD_ARRAY" != "[]" ]; then
  yq -i ".region.region.alicloud = $ALICLOUD_ARRAY" "$CONFIG_FILE"
fi

echo "Updated regions:"
echo "  AWS: $AWS_ARRAY"
echo "  GCP: $GCP_ARRAY"
echo "  Azure: $AZURE_ARRAY"
echo "  Alicloud: $ALICLOUD_ARRAY"
