#!/usr/bin/env bash
# 01-ensure-stack — a stack precisa estar viva para que o backup seja possível.
# `start` (não `up -d`): não recria container nem reescreve mount antes do backup.
set -Eeuo pipefail
# shellcheck source=../lib/common.sh
. "$(dirname "$0")/../lib/common.sh"

phase_begin "01-ensure-stack"

project_resolve

if [ "${#STACK_COMPOSE[@]}" -gt 0 ]; then
    COMPOSE=("${STACK_COMPOSE[@]}")
    log "stack de trabalho: ${STACK_PROJECT}$([ "$ADOPT" = 1 ] && printf ' (adoção)' || true)"
fi

if [ "$DRY_RUN" = 1 ]; then
    log "[dry-run] docker compose start (se houver container parado) e espera de saúde"
    log "[dry-run] validação de existência do banco seria feita aqui"
    phase_end
    exit 0
fi

"${COMPOSE[@]}" start
wait_stack 180

if ! "${COMPOSE[@]}" exec -T postgres sh -c \
    'PGPASSWORD="$POSTGRES_PASSWORD" psql -U "$POSTGRES_USER" -d "$POSTGRES_DB" -tAc "SELECT 1"' >/dev/null 2>&1; then
    die "banco '$(env_value DB_DATABASE)' não responde/existe; sem backup a atualização não começa."
fi

log "stack viva e banco acessível"
phase_end
