#!/usr/bin/env bash

set -x
set -euo pipefail

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

remote_config=${CONFIG_PATH}
local_config=/tmp/base-config.yaml
bucket_name=${remote_config#s3://}
bucket_name=${bucket_name%%/*}
output_bucket_region=$(aws s3api get-bucket-location --bucket=$bucket_name --query="LocationConstraint" \
  --region=us-west-2 --output=text --no-cli-pager)
aws s3 cp ${remote_config} ${local_config} --region=$output_bucket_region

cloud_provider=$(yq '.cloudProvider' "${local_config}")
region=$(yq '.region' "${local_config}")
logical_region_name=$(yq '.name' "${local_config}")
env=$(yq '.env' "${local_config}")
account_id=$(yq -r -ojson '.aws.dataplaneAccounts.0' "${local_config}")

o11y_eks_remote_output=$(yq '.jobOutput.o11y-eks' "${local_config}")
o11y_eks_local_output=/tmp/o11y-eks-output.yaml
aws s3 cp ${o11y_eks_remote_output} ${o11y_eks_local_output}  --region=$output_bucket_region
cluster_name=$(yq '.cluster_name' "${o11y_eks_local_output}")
kubeconfig=$(yq '.kubeconfig' "${o11y_eks_local_output}")
mkdir ~/.kube
echo "$kubeconfig" > ~/.kube/config

if ! eks_exists "$cluster_name" "$region" "$account_id"; then
  echo "EKS cluster $cluster_name already deleted, skip finalizer"
  exit 0
fi

echo "Deleting cloudformation stack of ingress & vpce"

aws cloudformation delete-stack \
  --profile $account_id \
  --region $region \
  --stack-name auto-deploy-$cluster_name-vpc-endpoint-service
aws cloudformation wait stack-delete-complete \
  --profile $account_id \
  --region $region \
  --stack-name auto-deploy-$cluster_name-vpc-endpoint-service

kubectl delete svc nginx-write -n kube-system --ignore-not-found
kubectl delete svc ingress-nginx-write-controller -n kube-system --ignore-not-found
kubectl delete ingress nginx-read -n kube-system --ignore-not-found
kubectl delete ingress nginx-ingress -n kube-system --ignore-not-found

kubectl wait --for=delete svc/nginx-write -n kube-system --timeout=600s
kubectl wait --for=delete svc/ingress-nginx-write-controller -n kube-system --timeout=600s
kubectl wait --for=delete ingress/nginx-read -n kube-system --timeout=600s
kubectl wait --for=delete ingress/nginx-ingress -n kube-system --timeout=600s

aws cloudformation delete-stack \
  --profile $account_id \
  --region $region \
  --stack-name auto-deploy-$cluster_name-ingress
aws cloudformation wait stack-delete-complete \
  --profile $account_id \
  --region $region \
  --stack-name auto-deploy-$cluster_name-ingress


echo "Deleting S3 Gateway Endpoint..."
vpc_id=$(aws --profile $account_id eks describe-cluster \
  --region $region \
  --name $cluster_name \
  --query "cluster.resourcesVpcConfig.vpcId" \
  --output text)
echo "vpc_id: $vpc_id"

existing_endpoint=$(aws --profile $account_id ec2 describe-vpc-endpoints \
  --region $region \
  --filters "Name=vpc-id,Values=$vpc_id" "Name=service-name,Values=com.amazonaws.$region.s3" "Name=vpc-endpoint-type,Values=Gateway" \
  --query "VpcEndpoints[0].VpcEndpointId" \
  --output text)

if [ "$existing_endpoint" == "None" ] || [ -z "$existing_endpoint" ]; then
  echo "S3 Gateway Endpoint does not exists, skipping..."
else
  echo "Deleting S3 Gateway Endpoint: $existing_endpoint"
  aws --profile $account_id ec2 delete-vpc-endpoints \
    --region $region \
    --vpc-endpoint-ids $existing_endpoint
fi
