#!/bin/bash
################################################################################
#   Copyright (c) 2023 Nordix Foundation.                                      #
#   Copyright (C) 2024 OpenInfra Foundation Europe. All rights reserved.       #
#                                                                              #
#   Licensed under the Apache License, Version 2.0 (the "License");            #
#   you may not use this file except in compliance with the License.           #
#   You may obtain a copy of the License at                                    #
#                                                                              #
#       http://www.apache.org/licenses/LICENSE-2.0                             #
#                                                                              #
#   Unless required by applicable law or agreed to in writing, software        #
#   distributed under the License is distributed on an "AS IS" BASIS,          #
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
#   See the License for the specific language governing permissions and        #
#   limitations under the License.                                             #
################################################################################

# This script to undeploy the NONRTRIC
ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
echo "** $ROOT_DIR"

COMPONENTS="
a1controller \
a1simulator \
capifcore \
controlpanel \
dmaapadapterservice \
dmaapmediatorservice \
dmeparticipant \
helmmanager \
informationservice \
nonrtricgateway \
orufhrecovery \
policymanagementservice \
ransliceassurance \
rappcatalogueenhancedservice \
rappcatalogueservice \
rappmanager \
servicemanager \
"

RECIPE_NAMESPACE=$(kubectl get cm --all-namespaces | grep nonrtric-recipe | awk '{print $1}')
kubectl get configmap  -n $RECIPE_NAMESPACE nonrtric-recipe  -o jsonpath='{.data.recipe}' > /tmp/recipe.yaml

if [ ! -s /tmp/recipe.yaml ]; then
    echo "NONRTRIC recipe is not found. Are you sure it's deployed successfully?"
    exit 0
fi

COMMON_BLOCK=$(cat /tmp/recipe.yaml | awk '/^common:/{getline; while ($0 ~ /^ +.*|^ *$/) {print $0; if (getline == 0) {break}}}')
NAMESPACE_BLOCK=$(cat /tmp/recipe.yaml | awk '/^  namespace:/{getline; while ($0 ~ /^    .*|^ *$/) {print $0; if (getline == 0) {break}}}')
NONRTRIC_NAMESPACE=$(echo "$NAMESPACE_BLOCK" | awk '/^ *nonrtric:/{print $2}')
RELEASE_PREFIX=$(echo "$COMMON_BLOCK" | awk '/^ *releasePrefix:/{print $2}')
INSTALL_KONG=$(cat /tmp/recipe.yaml | awk '/^  installKong:/{print $2}')
INSTALL_RANPM=$(cat /tmp/recipe.yaml | awk '/^  installRanpm:/{print $2}')

if [ "$INSTALL_KONG" = true ];then
  echo "Warning - deleting Kong routes and services for ServiceManager"
  SERVICEMANAGER_POD=$(kubectl get pods -o custom-columns=NAME:.metadata.name -l app=nonrtric-servicemanager --no-headers -n ${NONRTRIC_NAMESPACE:-nonrtric})
  if [[ -n $SERVICEMANAGER_POD ]]; then
    kubectl exec $SERVICEMANAGER_POD -n ${NONRTRIC_NAMESPACE:-nonrtric} -- ./kongclearup
  else
      echo "Error - Servicemanager pod not found, didn't delete Kong routes and services for ServiceManager"
  fi
  echo "Uninstalling kongstorage"
  helm delete kongstorage -n "${NONRTRIC_NAMESPACE:-nonrtric}"
  echo "Uninstalling Kong"
  helm delete oran-nonrtric -n ${NONRTRIC_NAMESPACE:-nonrtric}
fi

ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"

if [ "$INSTALL_RANPM" = true ];then
   echo "Running uninstall-ranpm.sh"
   chmod +x ${ROOT_DIR}/../ranpm/install/uninstall-ranpm.sh
   ${ROOT_DIR}/../ranpm/install/uninstall-ranpm.sh
   kubectl delete ns ran
   echo "uninstall-ranpm.sh completed"
fi

echo "Undeploying NONRTRIC components [$COMPONENTS]"

IS_HELM3=$(helm version -c --short|grep -e "^v3")
HELM_FLAG=''
if [ $IS_HELM3 ]
then
  HELM_FLAG=' -n '${NONRTRIC_NAMESPACE:-nonrtric}
else
  HELM_FLAG='--purge'
fi

helm delete ${HELM_FLAG} ${RELEASE_PREFIX}

kubectl delete cm -n ${NONRTRIC_NAMESPACE:-nonrtric} nonrtric-recipe

kubectl delete ns ${NONRTRIC_NAMESPACE:-nonrtric}

kubectl delete ns onap

# Cleanup ChartMuseum
CM_PID_FILE="$ROOT_DIR/CM_PID.txt"
if [ -f $CM_PID_FILE ]; then
  echo "Cleaning up ChartMuseum..."
  PID=$(cat "$CM_PID_FILE")
  echo "Killing ChartMuseum with PID $PID"
  kill $PID
  rm $CM_PID_FILE
  echo "ChartMuseum cleanup completed"
fi
