#!/usr/bin/env bash
# Set up Service Bus queue and Azure Event Grid subscription for blob changes.
set -euo pipefail

# Required environment variables
: "${RESOURCE_GROUP:?Must set RESOURCE_GROUP}"
: "${SUBSCRIPTION_ID:?Must set SUBSCRIPTION_ID}"
: "${STORAGE_ACCOUNT:?Must set STORAGE_ACCOUNT}"
: "${STORAGE_CONTAINER:?Must set STORAGE_CONTAINER}"
: "${SERVICEBUS_NAMESPACE:?Must set SERVICEBUS_NAMESPACE}"
: "${QUEUE_NAME:?Must set QUEUE_NAME}"
: "${EVENT_SUBSCRIPTION_NAME:?Must set EVENT_SUBSCRIPTION_NAME}"

echo "Creating Service Bus queue with dead-lettering enabled..."
az servicebus queue create \
  --resource-group "${RESOURCE_GROUP}" \
  --namespace-name "${SERVICEBUS_NAMESPACE}" \
  --name "${QUEUE_NAME}" \
  --max-delivery-count 10 \
  --enable-dead-lettering-on-message-expiration true

STORAGE_ID="/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${RESOURCE_GROUP}/providers/Microsoft.Storage/storageAccounts/${STORAGE_ACCOUNT}"
QUEUE_ID="/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${RESOURCE_GROUP}/providers/Microsoft.ServiceBus/namespaces/${SERVICEBUS_NAMESPACE}/queues/${QUEUE_NAME}"

echo "Creating Event Grid subscription for blob create, delete and rename events in one container..."
# --subject-begins-with limits the events to one container. Without it, every container in the account sends events.
az eventgrid event-subscription create \
  --name "${EVENT_SUBSCRIPTION_NAME}" \
  --source-resource-id "${STORAGE_ID}" \
  --endpoint-type servicebusqueue \
  --endpoint "${QUEUE_ID}" \
  --subject-begins-with "/blobServices/default/containers/${STORAGE_CONTAINER}/" \
  --included-event-types Microsoft.Storage.BlobCreated Microsoft.Storage.BlobDeleted Microsoft.Storage.BlobRenamed

echo "Event subscription ${EVENT_SUBSCRIPTION_NAME} created successfully."
