#!/bin/bash

cd "$(dirname "${BASH_SOURCE[0]}")";

# Namespace to install sample app
HOTROD_NAMESPACE=${HOTROD_NAMESPACE:-"sample-application"}
SIGNOZ_NAMESPACE="${SIGNOZ_NAMESPACE:-platform}"

# HotROD's docker image
if [[ -z $HOTROD_IMAGE ]]; then
    HOTROD_REPO="${HOTROD_REPO:-jaegertracing/example-hotrod}"
    HOTROD_TAG="${HOTROD_TAG:-1.30}"
    HOTROD_IMAGE="${HOTROD_REPO}:${HOTROD_TAG}"
fi

# Locust's docker image
if [[ -z $LOCUST_IMAGE ]]; then
    LOCUST_REPO="${LOCUST_REPO:-grubykarol/locust}"
    LOCUST_TAG="${LOCUST_TAG:-0.8.1-py3.6}"
    LOCUST_IMAGE="${LOCUST_REPO}:${LOCUST_TAG}"
fi

# Helm release name
HELM_RELEASE="${HELM_RELEASE:-my-release}"

# Otel Collector service address
if [[ -z $JAEGER_ENDPOINT ]]; then
    if [[ "$HELM_RELEASE" == *"signoz"* ]]; then
        JAEGER_ENDPOINT="http://${HELM_RELEASE}-otel-collector.${SIGNOZ_NAMESPACE}.svc.cluster.local:14268/api/traces"
    else
        JAEGER_ENDPOINT="http://${HELM_RELEASE}-signoz-otel-collector.${SIGNOZ_NAMESPACE}.svc.cluster.local:14268/api/traces"
    fi
fi

# Create namespace for sample application if does not exist
kubectl create namespace "$HOTROD_NAMESPACE" --save-config --dry-run -o yaml 2>/dev/null | kubectl apply -f -

# Setup sample apps into specified namespace
kubectl apply --namespace="${HOTROD_NAMESPACE}" -f <( \
    (cat hotrod-template.yaml 2>/dev/null || curl -sL https://github.com/SigNoz/signoz/raw/main/sample-apps/hotrod/hotrod-template.yaml) | \
        HOTROD_NAMESPACE="${HOTROD_NAMESPACE}" \
        HOTROD_IMAGE="${HOTROD_IMAGE}" \
        LOCUST_IMAGE="${LOCUST_IMAGE}" \
        JAEGER_ENDPOINT="${JAEGER_ENDPOINT}" \
        envsubst \
    )

if [ $? -ne 0 ]; then
    echo "❌ Failed to deploy HotROD sample application"
else
    echo "✅ Successfully deployed HotROD sample application"
fi
