#!/usr/bin/env bash
set -euo pipefail

uso() {
  cat <<'TXT'
Uso: pp --pulsar-escuta [--base=/caminho/do/sistema] [opcoes-da-escuta]

Executa um único ciclo da escuta para o sistema SISC atual e termina. Se
--base nao for informado, o comando procura a raiz do sistema a partir do
diretorio atual.

Opcoes comuns:
  --intervalo=N
  --paralelo=N          (padrao atual da escuta: 512; ajuste conforme CPU/processos)
  --lote-ator=N         (padrao 100 para atores com comandoLote/executavelLote)
  --timeout-ator=N
  --timeout-processamento=N
  --lote=N              (padrao atual da escuta: 20000, para rajadas >10k)
  --max-tentativas=N
  --intervalo-limpeza=N
  --log-compacto | --log-detalhado
  --validar-marcador-api
TXT
}

resolver_base() {
  local base_arg="${1:-}"
  if [[ -n "$base_arg" ]]; then
    (cd "$base_arg" 2>/dev/null && pwd -P) || return 1
    return 0
  fi
  local d
  d="$(pwd -P)"
  while [[ "$d" != "/" ]]; do
    if [[ -x "$d/escuta/escuta" && -d "$d/espaco" ]]; then
      printf '%s\n' "$d"
      return 0
    fi
    d="$(dirname "$d")"
  done
  return 1
}

base_arg=""
args=()
for a in "$@"; do
  case "$a" in
    --ajuda|--help|-h) uso; exit 0 ;;
    --base=*) base_arg="${a#--base=}" ;;
    *) args+=("$a") ;;
  esac
done

base="$(resolver_base "$base_arg")" || { echo "pulsar-escuta: nao foi possivel localizar a raiz do sistema atual" >&2; exit 1; }

cd "$base"
exec ./escuta/escuta --once --base="$base" "${args[@]}"
