#!/bin/bash
##############################################################################
#
#   Copyright (c) 2019 AT&T Intellectual Property.
#   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.
#
##############################################################################

# Installs well-known RIC charts then verifies specified helm chart
# Requires chart tgz archives in /tmp
OVERRIDEYAML=$1

ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
#Check for helm3
IS_HELM3=$(helm version -c --short|grep -e "^v3")

# Start Helm local repo if there isn't one
HELM_REPO_PID=$(ps -x | grep  "helm serve" | grep -v "grep" | awk '{print $1}')
if [ -z "$HELM_REPO_PID" ]
then
    if [ -z $IS_HELM3 ]
    then
      nohup helm serve >& /dev/null &
    else
      nohup helm servecm --port=8879 --context-path=/charts  --storage local >& /dev/null &
    fi
fi

echo "Package ric-common and serve it using Helm local repo"
# Package common templates and serve it using Helm local repo
HELM_LOCAL_REPO=""
if [ $IS_HELM3 ]
then
  eval $(helm env |grep HELM_REPOSITORY_CACHE)
  HELM_LOCAL_REPO="${HELM_REPOSITORY_CACHE}/local/"
else
  HELM_HOME=$(helm home)
  HELM_LOCAL_REPO="${HELM_HOME}/repository/local/"
fi

HELM_HOME=$(helm home)
COMMON_CHART_VERSION=$(cat $ROOT_DIR/../ric-common/Common-Template/helm/ric-common/Chart.yaml | grep version | awk '{print $2}')
helm package -d /tmp $ROOT_DIR/../ric-common/Common-Template/helm/ric-common
cp /tmp/ric-common-$COMMON_CHART_VERSION.tgz $HELM_LOCAL_REPO

AUX_COMMON_CHART_VERSION=$(cat $ROOT_DIR/../ric-common/Common-Template/helm/aux-common/Chart.yaml | grep version | awk '{print $2}')
helm package -d /tmp $ROOT_DIR/../ric-common/Common-Template/helm/aux-common
cp /tmp/aux-common-$AUX_COMMON_CHART_VERSION.tgz $HELM_LOCAL_REPO



helm repo index $HELM_LOCAL_REPO

echo "Make sure that helm local repo is added"
helm repo remove local
helm repo remove stable
helm repo add local http://127.0.0.1:8879/charts

echo "Create array of helm charts"
CHART_ARRAY=()
while IFS= read -r -d $'\0'; do
    CHART_ARRAY+=("$REPLY")
done < <(find $ROOT_DIR/../ -not -path "$ROOT_DIR/../nonrtric/*" -maxdepth 5 -name Chart.yaml -printf '%h\0')

echo "***************************************"
echo "Remove nonrtric parent chart from linting as its a conceptual visualization of Nonrtric components. This chart doesn't contain any templates & it's primarily
used for grouping of all Nonrtric components in deployment"

for dir in "${CHART_ARRAY[@]}"
do
    if [[ $dir == *"/helm/nonrtric"* ]]; then
        echo "Skip Nonrtric Parent chart"
    else
    echo "Update chart dependency for directory $dir"
    helm dep up $dir
    # Lint clearly marks errors; e.g., [ERROR]
    if [ -z $OVERRIDEYAML ]; then
        helm lint $dir > /tmp/output 2>&1
    else
        helm lint -f $OVERRIDEYAML $dir> /tmp/output 2>&1
    fi
    echo "***************************************************************************************************************"
    cat /tmp/output

    egrep -q '^Error: [0-9]* chart\(s\) linted, [0-9]* chart\(s\) failed' /tmp/output && exit 1
    echo "***************************************************************************************************************"

    if [ -z $OVERRIDEYAML ]; then
        helm template $dir > /tmp/output 2>&1
    else
	helm template -f $OVERRIDEYAML $dir > /tmp/output 2>&1
    fi
    echo "***************************************************************************************************************"
    cat /tmp/output
   sleep 1
    egrep -n '%!.\(.*=.*\)' /tmp/output && echo "Error: Type mismatch." && exit 1
    echo "***************************************************************************************************************"
    fi
done
