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

: "${ALICLOUD_PROFILE:?ALICLOUD_PROFILE is required}"
: "${ALICLOUD_REGION:?ALICLOUD_REGION is required}"
: "${INSTANCE_ID:?INSTANCE_ID is required}"

timeout_seconds="${BOOTSTRAP_TIMEOUT:-1800}"
deadline=$((SECONDS + timeout_seconds))
command_content="$(printf '%s' "if systemctl is-failed --quiet date-integration.service; then exit 20; fi; if cloud-init status 2>/dev/null | grep -qx 'status: error'; then exit 21; fi; if systemctl is-active --quiet date-integration.service && grep -q DATE_INTEGRATION_BOOTSTRAP_READY /var/log/cloud-init-output.log; then exit 0; fi; exit 1" | base64 -w0)"

while ((SECONDS < deadline)); do
  response="$(aliyun ecs RunCommand \
    --profile "$ALICLOUD_PROFILE" \
    --RegionId "$ALICLOUD_REGION" \
    --Type RunShellScript \
    --CommandContent "$command_content" \
    --ContentEncoding Base64 \
    --InstanceId.1 "$INSTANCE_ID" \
    --KeepCommand false \
    --Timeout 60 2>/dev/null || true)"
  invoke_id="$(jq -r '.InvokeId // empty' <<<"$response")"
  if [[ -n "$invoke_id" ]]; then
    for _ in $(seq 1 12); do
      invocation="$(aliyun ecs DescribeInvocations \
        --profile "$ALICLOUD_PROFILE" \
        --RegionId "$ALICLOUD_REGION" \
        --InvokeId "$invoke_id" \
        --InstanceId "$INSTANCE_ID" \
        --IncludeOutput true 2>/dev/null || true)"
      status="$(jq -r '.Invocations.Invocation[0].InvokeInstances.InvokeInstance[0].InvocationStatus // empty' <<<"$invocation")"
      exit_code="$(jq -r '.Invocations.Invocation[0].InvokeInstances.InvokeInstance[0].ExitCode // empty' <<<"$invocation")"
      if [[ "$status" == "Success" && "$exit_code" == "0" ]]; then
        echo "Alibaba Cloud bootstrap is ready."
        exit 0
      fi
      if [[ "$status" == "Failed" && "$exit_code" == "20" ]]; then
        echo "date-integration.service failed on $INSTANCE_ID; inspect its systemd status through Cloud Assistant." >&2
        exit 1
      fi
      if [[ "$status" == "Failed" && "$exit_code" == "21" ]]; then
        echo "Cloud-init failed on $INSTANCE_ID; inspect /var/log/cloud-init-output.log through Cloud Assistant." >&2
        exit 1
      fi
      if [[ "$status" == "Failed" || "$status" == "Stopped" ]]; then
        break
      fi
      sleep 5
    done
  fi
  sleep 15
done

echo "Timed out waiting for Alibaba Cloud bootstrap on $INSTANCE_ID." >&2
exit 1
