#!/usr/bin/env bash
set -eu

retry() {
    local loop=1
    local max_retries=3
    local retry_delays=5

    set +e
    while true; do
        "$@" && break || {
            if [[ ${loop} -le ${max_retries} ]]; then
                echo "Command ($*) failed. Retrying..."
                loop=$((loop+1))
                sleep ${retry_delays}
            else
                echo "Command ($*) failed after ${max_retries} attempts."
                exit 1
            fi
        }
    done
    set -e
}

build_docker_image() {
    local image=$1
    echo "Building image ${image}"
    if [ ! -f "${image}/Dockerfile" ]; then
        echo "Dockerfile not found for image ${image}. Exiting..."
        exit 1
    fi
    retry docker build --build-arg AWS_REGION="${AWS_REGION}" -f "${image}/Dockerfile" -t "${IMAGE_REPO_NAME}:${image}" .
}

if [ -z "${IMAGE}" ]; then
    echo "No image to build specified. Building all images..."
    find "$(pwd)" -type f -name Dockerfile -print0 | while read -d $'\0' file; do
        IMAGE_TAG=$(dirname "${file}" | xargs basename)
        build_docker_image "${IMAGE_TAG}"
    done
else
    build_docker_image "${IMAGE}"
fi
