#!/usr/bin/env bash
# 00-preflight — valida o ambiente ANTES de qualquer efeito. Somente leitura.
set -Eeuo pipefail
# shellcheck source=../lib/common.sh
. "$(dirname "$0")/../lib/common.sh"

phase_begin "00-preflight"

require_tools
validate_env init
check_dirty
disk_check
refuse_legacy_stack
project_collision
port_collision

# O Compose precisa aceitar o arquivo + o .env desta instalação antes de qualquer build/up.
"${COMPOSE[@]}" config -q >/dev/null || die "configuração do docker-compose.yml inválida para este .env"

perms="$(stat -c '%a' "$ENV_FILE" 2>/dev/null || printf '?')"
case "$perms" in
    600 | 400) ;;
    *) warn ".env com modo ${perms} (recomendado 600); o init ajusta para 600 ao aplicar." ;;
esac

if [ -z "$(env_value APP_KEY)" ]; then
    log "APP_KEY vazia — esperado no init; será gerada na fase 06."
fi

case "$AWS_ENDPOINT_V" in
    *storage:9000* | *//localhost* | *127.0.0.1*) log "storage: RustFS local (${AWS_ENDPOINT_V})" ;;
    *) warn "AWS_ENDPOINT='${AWS_ENDPOINT_V}' — storage externo; o snapshot local do RustFS não cobrirá o bucket." ;;
esac
if [ -z "$OFFSITE_MEDIA_BUCKET_V" ]; then
    warn "OFFSITE_MEDIA_BUCKET vazio — o update fará apenas o snapshot local do storage."
fi

log "projeto Compose: ${PROJECT_NAME}$([ "$(env_value COMPOSE_PROJECT_NAME)" = "$PROJECT_NAME" ] && printf ' (fixado no .env)' || printf ' (em memória; o init grava no .env)')"
log "imagem php-fpm : ${PHP_IMAGE}:${PHP_TAG}"
log "porta          : 127.0.0.1:${WEB_PORT}"
log "DATA_PATH      : ${DATA_ABS}"
log "STORAGE_PATH   : ${STORAGE_ABS}"
log "APP_URL        : ${APP_URL_V} (portal=${PORTAL_HOST}, cms=${CMS_HOST})"
log "git            : $(git_commit)"
log "docker         : $(docker --version | cut -d, -f1) · compose $(docker compose version --short)"

phase_end
