#!/usr/bin/env bash

set -x
set -euo pipefail

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

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}")
cluster_name=$(yq '.k8s.name' "${local_config}")
echo "cloud_provider: $cloud_provider"
echo "region: $region"
echo "logical_region_name: $logical_region_name"
echo "env: $env"
echo "cluster_name: $cluster_name"

echo "Deleting cloudformation stack of vpce"

aws cloudformation delete-stack \
  --region $region \
  --stack-name auto-deploy-$cluster_name-vpc-endpoint-service
aws cloudformation wait stack-delete-complete \
  --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

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

existing_endpoint=$(aws 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 ec2 delete-vpc-endpoints \
    --region $region \
    --vpc-endpoint-ids $existing_endpoint
fi
