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

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

Mostra o status da escuta do sistema SISC atual. Se --base nao for informado,
o comando procura a raiz do sistema a partir do diretorio atual.
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
}

pid_rodando() {
  local pid="${1:-}"
  [[ "$pid" =~ ^[0-9]+$ ]] && kill -0 "$pid" 2>/dev/null
}

json_escape() {
  python3 -c 'import json,sys; print(json.dumps(sys.argv[1], ensure_ascii=False))' "$1"
}

base_arg=""
saida_json=0
for a in "$@"; do
  case "$a" in
    --ajuda|--help|-h) uso; exit 0 ;;
    --json) saida_json=1 ;;
    --base=*) base_arg="${a#--base=}" ;;
    *) echo "status-escuta: argumento invalido: $a" >&2; exit 1 ;;
  esac
done

base="$(resolver_base "$base_arg")" || { echo "status-escuta: nao foi possivel localizar a raiz do sistema atual" >&2; exit 1; }
lockdir="$base/espaco/locks"
pidfile="$lockdir/escuta-daemon.pid"
lockfile="$lockdir/escuta.lock"
log="$base/espaco/escuta.log"
logpathfile="$lockdir/escuta-daemon.logpath"
if [[ -f "$logpathfile" ]]; then
  lido="$(head -n 1 "$logpathfile" 2>/dev/null || true)"
  if [[ -n "$lido" ]]; then log="$lido"; fi
fi
log_rel="$log"
case "$log" in "$base"/*) log_rel="${log#$base/}" ;; esac

pid=""
origem="nenhuma"
[[ -f "$pidfile" ]] && pid="$(tr -cd '0-9' < "$pidfile" || true)" && origem="pidfile"
if ! pid_rodando "$pid" && [[ -f "$lockfile" ]]; then
  pid="$(tr -cd '0-9' < "$lockfile" || true)"
  origem="lock"
fi

status="desligada"
if pid_rodando "$pid"; then status="ligada"; else pid=""; fi

if [[ "$saida_json" -eq 1 ]]; then
  printf '{\n'
  printf '  "status": %s,\n' "$(json_escape "$status")"
  printf '  "base": %s,\n' "$(json_escape "$base")"
  printf '  "pid": %s,\n' "${pid:-null}"
  printf '  "origemPid": %s,\n' "$(json_escape "$origem")"
  printf '  "log": %s\n' "$(json_escape "$log")"
  printf '}\n'
else
  if [[ "$status" == "ligada" ]]; then
    echo "escuta ligada para $base (pid=$pid, origem=$origem, log=$log_rel)"
  else
    echo "escuta desligada para $base"
  fi
fi
