#!/usr/bin/env bash
# 03-images — puxa as imagens de infra pinadas e constrói a imagem php-fpm DESTE projeto.
set -Eeuo pipefail
# shellcheck source=../lib/common.sh
. "$(dirname "$0")/../lib/common.sh"

phase_begin "03-images"

# A imagem do php-fpm é construída localmente; `queue` reusa a mesma. Só as de infra vêm de fora.
# `--ignore-pull-failures`: uma falha de registry não derruba o init se a imagem pinada já está
# local (o `up --wait` abaixo é quem prova que todas as imagens existem).
run "${COMPOSE[@]}" pull --ignore-pull-failures web postgres valkey storage

build_args=(build)
if [ "$BUILD_NO_CACHE" = 1 ]; then
    build_args+=(--no-cache)
fi
build_args+=(php-fpm)
run "${COMPOSE[@]}" "${build_args[@]}"

if [ "$DRY_RUN" = 0 ]; then
    image_id="$(docker image inspect -f '{{.Id}}' "$PHP_IMAGE:$PHP_TAG" 2>/dev/null || true)"
    [ -n "$image_id" ] || die "imagem ${PHP_IMAGE}:${PHP_TAG} não existe após o build"
    state_set IMAGE_ID "$image_id"

    phpv="$(docker run --rm --entrypoint php "$PHP_IMAGE:$PHP_TAG" -r 'echo PHP_VERSION;' 2>/dev/null | tr -d '\r\n' || true)"
    case "$phpv" in
        8.4.*)
            patch="${phpv#8.4.}"
            case "$patch" in '' | *[!0-9]*) die "PHP runtime inválido: '${phpv}'" ;; esac
            [ "$patch" -ge 27 ] || die "PHP ${phpv} < 8.4.27 (php2shell) — build rejeitado"
            ;;
        8.5.*)
            patch="${phpv#8.5.}"
            case "$patch" in '' | *[!0-9]*) die "PHP runtime inválido: '${phpv}'" ;; esac
            [ "$patch" -ge 12 ] || die "PHP ${phpv} < 8.5.12 (php2shell) — build rejeitado"
            ;;
        *) die "PHP runtime fora dos branches corrigidos (8.4.27+/8.5.12+): '${phpv}'" ;;
    esac
    ok "PHP ${phpv} · ${PHP_IMAGE}:${PHP_TAG} (${image_id:0:19}…)"
else
    log "[dry-run] imagem/tag: ${PHP_IMAGE}:${PHP_TAG} (será construída)"
fi

phase_end
