#!/bin/bash

set -euo pipefail

vendor=${1}
env=${2}
region=${3}
logical_region=${4}

# throw error if any of the arguments are not set
if [ -z "$vendor" ] || [ -z "$env" ] || [ -z "$region" ] || [ -z "$logical_region" ]; then
  echo "Error: Missing required arguments."
  echo "Usage: $0 <vendor> <env> <region> <logical_region> "
  exit 1
fi
echo "region: $region logical_region: $logical_region env: $env vendor: $vendor"

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

# Define components that have destroy-region scripts
COMPONENTS=("infra-v2" "regional-server" "cloud-addon" "drhouse" "dataplane")

echo "Starting region destruction process..."

# Call destroy-region script for each component
for component in "${COMPONENTS[@]}"; do
  component_path="${ROOT}/${component}"
  destroy_script="${component_path}/destroy-region.sh"
  
  if [ -f "$destroy_script" ]; then
    echo "===== Destroying ${component} ====="
    pushd "$component_path" > /dev/null
    
    # Prevent exit on error for individual component failures
    set +e
    bash destroy-region.sh "$vendor" "$env" "$region" "$logical_region"
    exit_code=$?
    set -e
    
    if [ $exit_code -ne 0 ]; then
      echo "Warning: Failed to destroy ${component} (exit code: $exit_code)"
      echo "Continuing with other components..."
    else
      echo "Successfully destroyed ${component}"
    fi
    
    popd > /dev/null
    echo ""
  else
    echo "Warning: destroy-region.sh not found for ${component}, skipping..."
  fi
done

# Call globalserver unregister-region script
globalserver_script="${ROOT}/globalserver/unregister-region.sh"
if [ -f "$globalserver_script" ]; then
  echo "===== Unregistering from globalserver ====="
  pushd "${ROOT}/globalserver" > /dev/null
  
  set +e
  bash unregister-region.sh "$vendor" "$env" "$region" "$logical_region"
  exit_code=$?
  set -e
  
  if [ $exit_code -ne 0 ]; then
    echo "Warning: Failed to unregister from globalserver (exit code: $exit_code)"
  else
    echo "Successfully unregistered from globalserver"
  fi
  
  popd > /dev/null
  echo ""
fi

echo "===== Updating deploy-groups.txt ====="
file_path="${ROOT}/deploy-groups.txt"
# remove region info from deploy-groups.txt if $region exists
if jq -e ".${env}.${vendor} | any(.logical_region == \"${logical_region}\")" $file_path > /dev/null; then
  jq "del(.${env}.${vendor}[] | select(.logical_region == \"${logical_region}\"))" $file_path > deploy-groups.txt.tmp && mv deploy-groups.txt.tmp $file_path
  echo "Removed region ${logical_region} from deploy-groups.txt"
else
  echo "Region ${logical_region} not found in deploy-groups.txt"
fi

echo "Region unregistration process completed."
