#!/bin/bash

DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
. "$DIR/.common.sh"

if [ "$1" == "" ]; then
	echo "Waits for a docker container to be healthy."
	echo "  Usage: $0 docker-container 30"
	echo "or use the third parameter to use the docker healthcheck instead of the internal one."
	echo "  Usage: $0 docker-container 30 true"
	exit 1
fi

SERVICE=$1
LIMIT=${2:-90}
USE_DOCKER_HEALTHCHECK=${3:-false}

echo -e "${BLUE}❯ ${CYAN}Waiting for healthy: ${YELLOW}${SERVICE}${RESET}"

is_up() {
	if [ "$USE_DOCKER_HEALTHCHECK" == "true" ]; then
		docker inspect --format='{{.State.Health.Status}}' "$SERVICE" | grep -qi "healthy"
	else
		docker exec "$SERVICE" /bin/healthcheck.sh
	fi
}

i=0
while ! is_up; do
	i=$((i + 1))
	if [ "$i" == "$LIMIT" ]; then
		echo -e "${BLUE}❯ ${RED}Timed out waiting for healthy${RESET}"
		docker logs --tail 50 "$SERVICE"
		exit 1
	fi
	sleep 1
done

echo ""
echo -e "${BLUE}❯ ${GREEN}Healthy!${RESET}"
