#!/usr/bin/env bash
# Roda a CLI do Firebase garantindo que exista um `java` no PATH.
#
# O emulador do Firestore é escrito em Java. No macOS com Homebrew o OpenJDK é
# instalado **keg-only**: o binário existe, mas fora do PATH — e o erro que sai
# ("Unable to locate a Java Runtime") não menciona Homebrew, keg-only nem PATH.
# Sem este resolvedor, o primeiro `emulators:start` de qualquer pessoa falha por
# um motivo que não tem nada a ver com Firebase.
set -euo pipefail

# `command -v java` **não** serve como teste no macOS: existe um stub em
# /usr/bin/java que responde ao `command -v` e falha ao executar, com a mesma
# mensagem de "Unable to locate a Java Runtime". O teste tem de ser rodar.
java_funciona() { java -version >/dev/null 2>&1; }

# Onde procurar o JDK. Sobrescrevível para o teste conseguir exercitar o caminho
# de "não existe Java nenhum" sem desinstalar nada da máquina — caminho de erro
# que ninguém testa é caminho de erro que mente.
JDK_CANDIDATOS="${JDK_CANDIDATOS-/opt/homebrew/opt/openjdk/bin:/usr/local/opt/openjdk/bin:${JAVA_HOME:-}/bin}"

if ! java_funciona; then
  IFS=':' read -r -a candidatos <<< "$JDK_CANDIDATOS"
  # `set -u` trata array vazio como variável não definida; sem o `+` o script
  # morre com "unbound variable" em vez de dar a mensagem útil.
  for candidato in "${candidatos[@]+${candidatos[@]}}"
  do
    if [ -x "$candidato/java" ]; then
      export PATH="$candidato:$PATH"
      java_funciona && break
    fi
  done
fi

if ! java_funciona; then
  cat >&2 <<'ERRO'
Java não encontrado (ou o que existe não roda), e o emulador do Firestore
precisa dele. No macOS há um stub em /usr/bin/java que existe e falha — não é
um JDK.

  macOS (Homebrew):  brew install openjdk
  Já instalou?       o OpenJDK do Homebrew é keg-only; este script procura em
                     /opt/homebrew/opt/openjdk/bin e /usr/local/opt/openjdk/bin.
                     Se estiver em outro lugar, exporte JAVA_HOME.
ERRO
  exit 1
fi

# `demo-` no id do projeto não é enfeite: o Firebase trata projeto com esse
# prefixo como **demo**, que nunca fala com serviço real. É a trava contra rodar
# teste apontando para produção sem perceber.
projeto="${FIREBASE_PROJETO:-demo-bolao}"
case "$projeto" in
  demo-*) ;;
  *)
    if [ "${PERMITIR_PROJETO_REAL:-}" != "true" ]; then
      echo "Projeto '$projeto' não é demo-*. Para falar com projeto real, exporte PERMITIR_PROJETO_REAL=true." >&2
      exit 1
    fi
    ;;
esac

exec npx firebase --project "$projeto" "$@"
