#!/usr/bin/env bash
set -e

# ------
# SETUP:
# ------

# local args
this=$(basename "${BASH_SOURCE[0]}")
force=${FORCE:-${1:-false}}
name=${RELEASE:-${2:-participant-portal}}
ns=${NAMESPACE:-${3:-rtgsglobal}}

# ----------
# FUNCTIONS:
# ----------

# delete deployment from Helm
function helm_uninstall {
	local name=$1
    if helm status $name > /dev/null 2>&1; then
        echo "Cleaning up Helm deployment"
        helm uninstall $name || true
        echo
    else
        echo "No Helm release '$name' found"
    fi
}

# disable localhost routing
function uninstall_nginx {
    if helm status ingress-nginx --namespace default > /dev/null 2>&1; then
        if "${force,,}" = "true"; then
            echo "Deleting ingress-nginx..."
            helm uninstall ingress-nginx --namespace default || true
        else
            echo "(Leaving nginx in place)"
        fi
        echo
		else
				echo "No Helm release 'ingress-nginx' found"
    fi
}

# remove persistent volumes
function uninstall_persistent_volumes {
    local name=$1
    claims=$(kubectl --context=docker-desktop get pvc --no-headers -o custom-columns=":metadata.name" | grep "^data-$name" || true)
    if [[ -n "$claims" ]]; then
        for pvc in $claims; do
            echo "Deleting $pvc..."
            kubectl --context=docker-desktop delete pvc "$pvc" || true
        done
		else
			echo "No persistent volumes found"
    fi
}

# remove cloud native postgres
function uninstall_cnpg {
    if helm status cnpg --namespace cnpg-system > /dev/null 2>&1; then
        if "${force,,}" = "true"; then
            echo "Deleting cnpg..."
            helm uninstall cnpg --namespace cnpg-system || true
        else
            echo "(Leaving cnpg in place)"
        fi
        echo
		else
				echo "No Helm release 'cnpg' found"
    fi
}

function delete_secret {
		local secret_name=$1
		if kubectl get secret "$secret_name" -n "$ns" &>/dev/null; then
			echo "Deleting ${secret_name}..."
      kubectl delete secret "$secret_name" -n "$ns" || true
    else
				echo "No secret '${secret_name}' found"
    fi
}

function delete_migration_jobs {
    local jobs
    jobs=$(kubectl --context=docker-desktop get jobs -n "$ns" -l app.kubernetes.io/component=migration --no-headers -o custom-columns=":metadata.name" 2>/dev/null || true)
    if [[ -n "$jobs" ]]; then
        echo "Deleting migration jobs..."
        kubectl --context=docker-desktop delete jobs -n "$ns" -l app.kubernetes.io/component=migration --ignore-not-found || true
    else
        echo "No migration jobs found"
    fi
}

# ------
# LOGIC:
# ------

pushd "$(dirname "${BASH_SOURCE[0]}")/.."
helm_uninstall $name
delete_migration_jobs
uninstall_cnpg
uninstall_nginx
uninstall_persistent_volumes $name
delete_secret portal-tls
delete_secret notifications-tls
popd
