#!/usr/bin/env bash
# 08-verify — prova a atualização no domínio configurado e arquiva o vendor anterior.
set -Eeuo pipefail
# shellcheck source=../lib/common.sh
. "$(dirname "$0")/../lib/common.sh"

phase_begin "08-verify"

if [ "$DRY_RUN" = 1 ]; then
    log "[dry-run] pulando verificações de runtime (a stack não foi alterada)"
    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 a atualização" ;;
esac

phpv="$("${COMPOSE[@]}" exec -T php-fpm php -r 'echo PHP_VERSION;' | tr -d '\r\n')"
log "PHP runtime: ${phpv}"
current_image="$(docker image inspect -f '{{.Id}}' "$PHP_IMAGE:$PHP_TAG" 2>/dev/null || true)"
[ -n "$current_image" ] || die "imagem ${PHP_IMAGE}:${PHP_TAG} ausente"
log "imagem em uso: ${current_image:0:19}…"
[ "$(state_get IMAGE_ID)" = "$current_image" ] ||
    warn "a imagem atual difere da construída nesta execução (outro processo pode ter feito build?)"

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

for key in BACKUP_DB BACKUP_STORAGE BACKUP_STORAGE_APP; do
    val="$(state_get "$key")"
    if [ -n "$val" ]; then
        log "backup ${key}: ${val}"
        if [ -f "${val}.sha256" ]; then
            log "  sha256: $(cut -d' ' -f1 "${val}.sha256")"
        fi
    fi
done

# O vendor anterior só é descartado DEPOIS de a stack provar saúde; o descarte vai para
# .pi/trash (convenção do projeto), nunca `rm -rf`.
vendor_pre="$(state_get VENDOR_PRE)"
if [ -n "$vendor_pre" ] && [ -d "$vendor_pre" ]; then
    ensure_dir "$ROOT/.pi/trash"
    if mv "$vendor_pre" "$ROOT/.pi/trash/vendor-pre-${RUN_ID}"; then
        log "vendor anterior movido para .pi/trash/vendor-pre-${RUN_ID}"
    else
        warn "não foi possível mover o vendor anterior (${vendor_pre})"
    fi
fi

write_owner_marker
log "marcador de posse do DATA_PATH atualizado"

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 "atualização verificada: http://127.0.0.1:${WEB_PORT} (Host: ${PORTAL_HOST} / ${CMS_HOST})"
phase_end
