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

usage() {
  echo "Usage: pi-job-wait JOB_ID [--poll-seconds N] [--lines N] [--runtime-root DIR]"
}

JOB_ID=""
POLL_SECONDS=5
LINES=40
RUNTIME_ROOT="${PI_JOB_ROOT:-/home/sebas/runtime/pi-jobs}"

while [[ $# -gt 0 ]]; do
  case "$1" in
    --poll-seconds) POLL_SECONDS="$2"; shift 2 ;;
    --lines) LINES="$2"; shift 2 ;;
    --runtime-root) RUNTIME_ROOT="$2"; shift 2 ;;
    -h|--help) usage; exit 0 ;;
    --*) echo "Unknown arg: $1" >&2; usage >&2; exit 1 ;;
    *)
      if [[ -z "$JOB_ID" ]]; then JOB_ID="$1"; shift
      else echo "Unexpected arg: $1" >&2; exit 1; fi ;;
  esac
done

if [[ -z "$JOB_ID" ]]; then
  usage >&2
  exit 1
fi

JOB_DIR="$RUNTIME_ROOT/jobs/$JOB_ID"
if [[ ! -d "$JOB_DIR" ]]; then
  echo "job not found: $JOB_ID" >&2
  exit 1
fi

while true; do
  STATUS="$(cat "$JOB_DIR/status" 2>/dev/null || echo unknown)"
  PID="$(cat "$JOB_DIR/pid" 2>/dev/null || true)"
  if [[ "$STATUS" != "queued" && "$STATUS" != "running" ]]; then
    break
  fi
  if [[ -n "$PID" ]] && kill -0 "$PID" 2>/dev/null; then
    sleep "$POLL_SECONDS"
    continue
  fi
  break
done

"$(cd "$(dirname "$0")" && pwd)/pi-job-check" "$JOB_ID" --lines "$LINES" --runtime-root "$RUNTIME_ROOT"
