#!/bin/bash

set -e

# Configuration
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PERF_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
IMAGE_NAME="${IMAGE_NAME:-performance-test}"
IMAGE_TAG="${IMAGE_TAG:-$(date +%Y%m%d-%H%M%S)}"
REGISTRY="${REGISTRY:-552185537300.dkr.ecr.us-west-2.amazonaws.com/observability}"
FULL_IMAGE="${REGISTRY}/${IMAGE_NAME}:${IMAGE_TAG}"
NAMESPACE="${NAMESPACE:-observability}"
KUBECONFIG="${KUBECONFIG:-$HOME/.kube/config}"

echo "=========================================="
echo "Building Performance Test"
echo "=========================================="
echo "Image: ${FULL_IMAGE}"
echo "Namespace: ${NAMESPACE}"
echo ""

# Build test binary locally
echo "Building test binary locally..."
cd "${PERF_DIR}"
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go test -c -tags e2e -o deploy/performance-test .

# Build Docker image
echo "Building Docker image..."
cd "${SCRIPT_DIR}"
docker build --platform linux/amd64  -f Dockerfile -t "${FULL_IMAGE}" .

# Push to registry
echo "Pushing image to registry..."
docker push "${FULL_IMAGE}"

# Clean up local binary
echo "Cleaning up local binary..."
rm -f "${SCRIPT_DIR}/performance-test"

# Create/Update ConfigMap from local config file
echo "Creating/Updating ConfigMap..."
kubectl create configmap performance-test-config \
  --from-file=perf_config.yaml="${PERF_DIR}/perf_config.yaml" \
  -n "${NAMESPACE}" \
  --dry-run=client -o yaml | kubectl apply -f -

# Update job manifest with image
echo "Updating job manifest..."
sed "s|<IMAGE_PLACEHOLDER>|${FULL_IMAGE}|g" "${SCRIPT_DIR}/job.yaml" > "${SCRIPT_DIR}/job-deployed.yaml"

# Delete existing job if it exists
echo "Cleaning up existing job..."
kubectl delete job performance-test -n "${NAMESPACE}" --ignore-not-found=true

# Wait a moment for cleanup
sleep 2

# Create the job
echo "Creating performance test job..."
kubectl apply -f "${SCRIPT_DIR}/job-deployed.yaml" -n "${NAMESPACE}"

echo ""
echo "=========================================="
echo "Job created successfully!"
echo "=========================================="
echo ""
echo "Monitor the job with:"
echo "  kubectl get job performance-test -n ${NAMESPACE}"
echo "  kubectl get pods -n ${NAMESPACE} -l app=performance-test"
echo ""
echo "View logs with:"
echo "  kubectl logs -n ${NAMESPACE} -l app=performance-test -f"
echo ""
echo "Get job status:"
echo "  kubectl describe job performance-test -n ${NAMESPACE}"
echo ""
