#!/usr/bin/env bash
# L3 결과 한 번 보기 (비차단). 출력: L3_STATE=still-running | done | failed:<요지>
# exit 0 = done 또는 still-running · 12 = failed (5.2f 기록 후)
set -euo pipefail
source "$(dirname "$0")/env.sh" "${1:-}"

RUN_NONCE="$(cat "$STATE/l3-run-nonce" 2>/dev/null || printf '')"
DEADLINE="$(cat "$STATE/l3-deadline" 2>/dev/null || printf '0')"
L3_PID="$(cat "$STATE/l3-pid" 2>/dev/null || printf '')"
alive() { [ -n "$L3_PID" ] && kill -0 "$L3_PID" 2>/dev/null; }
l3_nonce_ok() {
  [ -f "$STATE/l3.json" ] || return 1
  [ "$(jread "$STATE/l3.json" 'j.run_nonce||""' "")" = "$RUN_NONCE" ]
}

STATE_OUT=""
if [ -z "$RUN_NONCE" ]; then
  STATE_OUT="failed:not-launched (l3-run-nonce 없음)"
elif [ -f "$STATE/l3.json" ]; then
  if l3_nonce_ok; then STATE_OUT="done"; else STATE_OUT="failed:nonce-mismatch (l3.json 이 다른 실행의 것)"; fi
elif alive; then
  if [ "$(date +%s)" -ge "$DEADLINE" ]; then STATE_OUT="failed:timeout (1000s 경과, 기록 없음)"; else STATE_OUT="still-running"; fi
else
  # 프로세스가 끝났다 — 기록이 막 쓰였을 수 있으니 다시 본다.
  if [ -f "$STATE/l3.json" ] && l3_nonce_ok; then STATE_OUT="done"
  else STATE_OUT="failed:died-without-record (stderr: $MCCP_TMP/l3-call.err)"; fi
fi
echo "L3_STATE=$STATE_OUT"
case "$STATE_OUT" in
  still-running|done) exit 0 ;;
  *) record_stop 5.2f; echo "HALT_STAGE=5.2f"; exit 12 ;;
esac
