#!/bin/sh

set -eu

container_name="${1:?container name required}"
timeout_seconds="${2:-240}"

case "$timeout_seconds" in
  ''|*[!0-9]*)
    echo "invalid timeout: $timeout_seconds" >&2
    exit 2
    ;;
esac

deadline=$(( $(date +%s) + timeout_seconds ))
previous_status=''

while test "$(date +%s)" -lt "$deadline"; do
  state="$('/usr/bin/podman' inspect --format '{{.State.Status}}' "$container_name" 2>/dev/null || true)"
  health="$('/usr/bin/podman' inspect --format '{{if .State.Health}}{{.State.Health.Status}}{{else}}none{{end}}' "$container_name" 2>/dev/null || true)"
  current_status="state=${state:-missing} health=${health:-unknown}"

  if test "$current_status" != "$previous_status"; then
    echo "$container_name: $current_status"
    previous_status="$current_status"
  fi

  case "$health" in
    healthy)
      exit 0
      ;;
    unhealthy)
      echo "$container_name became unhealthy during startup" >&2
      '/usr/bin/podman' inspect --format '{{json .State.Health}}' "$container_name" >&2 || true
      exit 1
      ;;
  esac

  case "$state" in
    exited|dead|stopping)
      echo "$container_name stopped before becoming healthy" >&2
      exit 1
      ;;
  esac

  sleep 1
done

echo "$container_name did not become healthy within ${timeout_seconds}s" >&2
'/usr/bin/podman' inspect --format '{{json .State.Health}}' "$container_name" >&2 || true
exit 1
