#!/usr/bin/env bash
# 07-verify — prova que a estrutura está de pé e que o domínio configurado responde.
set -Eeuo pipefail
# shellcheck source=../lib/common.sh
. "$(dirname "$0")/../lib/common.sh"

phase_begin "07-verify"

if [ "$DRY_RUN" = 1 ]; then
    log "[dry-run] pulando verificações de runtime (a estrutura ainda não foi criada)"
    phase_end
    exit 0
fi

wait_stack 180

expect_http "$PORTAL_HOST" /up 200
expect_http "$PORTAL_HOST" / "200 301 302"
expect_http "$CMS_HOST" /login 200

run "${COMPOSE[@]}" exec -T web caddy validate --config /etc/caddy/Caddyfile
run "${COMPOSE[@]}" exec -T php-fpm php artisan about --only=environment,cache,drivers

status="$("${COMPOSE[@]}" exec -T php-fpm php artisan migrate:status --no-ansi 2>&1 || true)"
printf '%s\n' "$status"
case "$status" in
    *Pending*) die "há migrações pendentes após o init" ;;
esac

phpv="$("${COMPOSE[@]}" exec -T php-fpm php -r 'echo PHP_VERSION;' | tr -d '\r\n')"
log "PHP runtime: ${phpv}"
php_image_id="$(docker image inspect -f '{{.Id}}' "$PHP_IMAGE:$PHP_TAG" 2>/dev/null || true)"
[ -n "$php_image_id" ] || die "imagem ${PHP_IMAGE}:${PHP_TAG} ausente"
state_set IMAGE_ID "$php_image_id"

log "containers desta estrutura:"
docker ps --filter "label=com.docker.compose.project=${PROJECT_NAME}" \
    --format '  {{.Names}}  {{.Status}}  {{.Ports}}'

# A URL pública termina no Apache do WHM (fora desta stack). Aviso, nunca falha: o edge
# pode ainda não ter ProxyPass/SSL; a prova local (Host do domínio) já passou acima.
if ! curl -fsS --max-time 8 "https://${PORTAL_HOST}/up" >/dev/null 2>&1; then
    warn "https://${PORTAL_HOST}/up ainda não responde (ProxyPass/SSL do WHM é externo a esta stack)."
fi

"${COMPOSE[@]}" exec -T php-fpm php tools/sbom.php >"$ROOT/sbom.cdx.json" ||
    die "falha ao gerar sbom.cdx.json"
[ -s "$ROOT/sbom.cdx.json" ] || die "sbom.cdx.json vazio"

ok "estrutura funcionando: http://127.0.0.1:${WEB_PORT} (Host: ${PORTAL_HOST} / ${CMS_HOST})"
phase_end
