#!/usr/bin/env bash
set -Eeuo pipefail

AWS_REGION='${aws_region}'
DATA_VOLUME_ID='${data_volume_id}'
INSTALL_ROOT=/opt/date-integration
DATA_ROOT=/srv/date-integration

metadata_token="$(curl -fsS -X PUT \
  -H 'X-aws-ec2-metadata-token-ttl-seconds: 21600' \
  http://169.254.169.254/latest/api/token)"
instance_id="$(curl -fsS \
  -H "X-aws-ec2-metadata-token: $metadata_token" \
  http://169.254.169.254/latest/meta-data/instance-id)"

tag_status() {
  aws ec2 create-tags \
    --region "$AWS_REGION" \
    --resources "$instance_id" \
    --tags "Key=BootstrapStatus,Value=$1" >/dev/null 2>&1 || true
}

trap 'tag_status failed' ERR
tag_status running

dnf install -y docker xfsprogs jq
if ! command -v aws >/dev/null 2>&1; then
  dnf install -y awscli2
fi

systemctl enable --now docker
systemctl enable --now amazon-ssm-agent || true

compose_url="https://github.com/docker/compose/releases/download/${compose_version}/docker-compose-linux-aarch64"
curl -fsSL "$compose_url" -o /usr/local/bin/docker-compose
echo '${compose_sha256}  /usr/local/bin/docker-compose' | sha256sum -c -
chmod 0755 /usr/local/bin/docker-compose

volume_serial="$${DATA_VOLUME_ID//-/}"
data_device=""
for _ in $(seq 1 180); do
  candidate="/dev/disk/by-id/nvme-Amazon_Elastic_Block_Store_$volume_serial"
  if [[ -e "$candidate" ]]; then
    data_device="$(readlink -f "$candidate")"
    break
  fi
  data_device="$(lsblk -dpno NAME,SERIAL | awk -v serial="$volume_serial" '$2 == serial {print $1; exit}')"
  if [[ -n "$data_device" ]]; then
    break
  fi
  sleep 5
done

if [[ -z "$data_device" ]]; then
  echo "Timed out waiting for EBS volume $DATA_VOLUME_ID" >&2
  exit 1
fi

if ! blkid "$data_device" >/dev/null 2>&1; then
  mkfs.xfs -f "$data_device"
fi

install -d -m 0750 "$DATA_ROOT"
data_uuid="$(blkid -s UUID -o value "$data_device")"
if ! grep -q "UUID=$data_uuid" /etc/fstab; then
  echo "UUID=$data_uuid $DATA_ROOT xfs defaults,nofail 0 2" >> /etc/fstab
fi
mountpoint -q "$DATA_ROOT" || mount "$DATA_ROOT"

install -d -m 0700 "$INSTALL_ROOT"
echo '${install_services_b64}' | base64 -d > /usr/local/sbin/date-integration-install
chmod 0700 /usr/local/sbin/date-integration-install
/usr/local/sbin/date-integration-install

tag_status ready
trap - ERR
