#!/usr/bin/env bash

printf '%s\n' "Setting programmatically derived runtime variables"
if [ "${Environment}" != 'local' ]; then
  # Assume this is a Fargate task. Find the private IP address without installing additional packages.
  DNS_NAME=$(curl -s ${ECS_CONTAINER_METADATA_URI_V4}/task | jq -r '.Containers[0].Networks[0].PrivateDNSName')
  printf '%s\n' "Task DNS name is ${DNS_NAME}"
  export CONNECT_REST_ADVERTISED_HOST_NAME="${DNS_NAME}"
else
  # Provide dev and local settings
  export CONNECT_REST_ADVERTISED_HOST_NAME='localhost'
fi

# This must be unique per worker cluster
export CONNECT_CONFIG_STORAGE_TOPIC="_${CONNECT_GROUP_ID}-configs"
export CONNECT_OFFSET_STORAGE_TOPIC="_${CONNECT_GROUP_ID}-offsets"
export CONNECT_STATUS_STORAGE_TOPIC="_${CONNECT_GROUP_ID}-status"

# Find Java and cacerts
JAVA_HOME=$(java -XshowSettings:properties -version 2>&1 > /dev/null | grep -i java.home | awk '{print $3}')
CACERT_FILE="${JAVA_HOME}/lib/security/cacerts"
export CONNECT_SSL_TRUSTSTORE_LOCATION="${CACERT_FILE}"
export CONNECT_CONSUMER_SSL_TRUSTSTORE_LOCATION="${CACERT_FILE}"
export CONNECT_PRODUCER_SSL_TRUSTSTORE_LOCATION="${CACERT_FILE}"


# In case some connector does not support external secrets provider
# (e.g. debezium_source or snoflake_sink) store secrets listed in
# SECRETS_MANAGER_SECRET_NAMES environment variable in a file with
# corresponding name.
#
# Example secret in connector config for JSON secret:
# ${file:/etc/kafka-connect/secrets/MY_JSON_SECRET:secret_key}
#
# Example secret config for PLAINTEXT secret:
# ${file:/etc/kafka-connect/secrets/MY_PLAINTEXT_SECRET}
# 
for secret_name in $(echo ${SECRETS_MANAGER_SECRET_NAMES} | tr ',' '\n'); do
  secret=$(aws secretsmanager get-secret-value \
    --secret-id "${Environment}/${SERVICE_NAME}/${secret_name}" \
    --region ${AWS_REGION} \
    --query 'SecretString' --output text)
  jq_pattern='to_entries[]|"\(.key)=\(.value)"'
  echo $secret | jq -r $jq_pattern > /etc/kafka-connect/secrets/${secret_name} 2>/dev/null && continue
  echo $secret > /etc/kafka-connect/secrets/${secret_name}
done

# Launch Kafka Connect Cluster.
/etc/confluent/docker/run
