#!/bin/bash

export DEPLOYS=$(helm ls | grep $RELEASE_NAME | wc -l)

# Replace name of application in Chart Templates
sed -i "s/APP_NAME/${APPLICATION_NAME}/g" ../${CHART_DIR}/Chart.yaml
sed -i "s/APP_NAME/${APPLICATION_NAME}/g" ../${CHART_DIR}/stacks/${STACK}/values.yaml

# Replace variables from CICD env variables in that files
envsubst < ../${CHART_DIR}/stacks/${STACK}/values.yaml > ../${CHART_DIR}/stacks/${STACK}/values_tmp.yaml
cp ../${CHART_DIR}/stacks/${STACK}/values_tmp.yaml ../${CHART_DIR}/stacks/${STACK}/values.yaml

# Image Tag fix
#TAG=$(echo ${TAG} | sed 's/\//-/g;s/_/-/g')
if [ -z "${TAG}" ]; then
    TAG=$1
else
    TAG=$(echo ${TAG} | sed 's/\//-/g;s/_/-/g')
fi

if [ -n "${SET_IMAGE}" ]; then
    echo -e "\n - Custom image defined in gitlab-ci.yml"
    echo "${SET_IMAGE}"
    IMAGE_NAME=$(echo "${SET_IMAGE}" | awk -F: '{print $1}')
    TAG=$(echo "${SET_IMAGE}" | awk -F: '{print $2}')
fi

echo -e "\n---------------------------------------------------------------------------------------------\n"
echo -e "\n IMAGE TO DEPLOY: ${IMAGE_NAME}:${TAG}"
echo -e "\n---------------------------------------------------------------------------------------------\n"


if [ ${DEPLOYS} -eq 0 ]; then
    echo -e "\n$RELEASE_NAME doesn't exist proceeding with its installation...\n"
    echo "helm install --name "${RELEASE_NAME}" --namespace ${NAMESPACE} --set ImageName=${IMAGE_NAME} --set ImageVersion=${TAG} --set Namespace=${NAMESPACE} ../${CHART_DIR} --wait --values=../${CHART_DIR}/stacks/${STACK}/values.yaml"
    helm install --name "${RELEASE_NAME}" --namespace ${NAMESPACE} --set ImageName=${IMAGE_NAME} --set ImageVersion=${TAG} --set Namespace=${NAMESPACE} ../${CHART_DIR} --wait --values=../${CHART_DIR}/stacks/${STACK}/values.yaml
else 
    echo -e "\n$RELEASE_NAME exist, upgrading...\n"
    echo "helm upgrade "${RELEASE_NAME}" --namespace ${NAMESPACE} --set ImageName=${IMAGE_NAME} --set ImageVersion=${TAG} --set Namespace=${NAMESPACE} ../${CHART_DIR} --wait --values=../${CHART_DIR}/stacks/${STACK}/values.yaml"
    helm upgrade "${RELEASE_NAME}" --namespace ${NAMESPACE} --set ImageName=${IMAGE_NAME} --set ImageVersion=${TAG} --set Namespace=${NAMESPACE} ../${CHART_DIR} --wait --values=../${CHART_DIR}/stacks/${STACK}/values.yaml
fi

# SENT NOTIFICATION
# Get the exit status of the last command
EXIT_STATUS=$?

echo -e "\n---------------------------------------------------------------------------------------------"
# Check if the exit status is not 0 (indicating an error)
if [ $EXIT_STATUS -ne 0 ]; then
    # Rollback the release to the previous version
    echo -e "\n - Rolling back application"
    helm rollback ${RELEASE_NAME} 0
    ROLLBACK_STATUS=$?

    # Check if the rollback was successful
    if [ $ROLLBACK_STATUS -ne 0 ]; then
        echo -e "\n - Rollback failed. Please check the application status and consider rolling back manually."
        scripts/notify-slack-deploy.sh ${ROLLBACK_STATUS}
    else
        echo -e "\n - Rollback successful. Application has been rolled back to the previous version."
        scripts/notify-slack-deploy.sh ${EXIT_STATUS}
    fi
else
  # Send a notification about the deployment status
    echo -e "\n - Deployed Successfully. Sending Notification to slack..."
    scripts/notify-slack-deploy.sh ${EXIT_STATUS}
fi

echo -e "\n  - Insert status of deploy in ElasticSearch..."
python3 scripts/send-deploy-to-elastic.py ${EXIT_STATUS}

exit $EXIT_STATUS
