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

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

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

while [[ $# -gt 0 ]]; do
  case "$1" in
    --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

# shellcheck disable=SC1091
source "$JOB_DIR/meta.env"
STATUS="$(cat "$JOB_DIR/status" 2>/dev/null || echo unknown)"
EXIT_CODE="$(cat "$JOB_DIR/exit_code" 2>/dev/null || true)"
STARTED_AT="$(cat "$JOB_DIR/started_at" 2>/dev/null || true)"
FINISHED_AT="$(cat "$JOB_DIR/finished_at" 2>/dev/null || true)"
PID="$(cat "$JOB_DIR/pid" 2>/dev/null || true)"

PID_ALIVE=no
if [[ -n "$PID" ]] && kill -0 "$PID" 2>/dev/null; then
  PID_ALIVE=yes
fi

if [[ "$STATUS" == "queued" || "$STATUS" == "running" ]]; then
  if [[ "$PID_ALIVE" == "no" ]]; then
    if [[ -n "$EXIT_CODE" ]]; then
      if [[ "$EXIT_CODE" == "0" ]]; then
        STATUS="succeeded"
      else
        STATUS="failed"
      fi
    else
      STATUS="failed"
      EXIT_CODE="${EXIT_CODE:-1}"
      printf '%s\n' "$EXIT_CODE" > "$JOB_DIR/exit_code"
      [[ -n "$FINISHED_AT" ]] || { FINISHED_AT="$(date -u +"%Y-%m-%dT%H:%M:%SZ")"; printf '%s\n' "$FINISHED_AT" > "$JOB_DIR/finished_at"; }
    fi
    printf '%s\n' "$STATUS" > "$JOB_DIR/status"
  fi
fi

cat <<EOF
job_id=$JOB_ID
cwd=$CWD
job_dir=$JOB_DIR
status=$STATUS
pid=$PID
pid_alive=$PID_ALIVE
started_at=$STARTED_AT
finished_at=$FINISHED_AT
exit_code=$EXIT_CODE
log=$JOB_DIR/output.log
--- log tail ($LINES) ---
EOF

tail -n "$LINES" "$JOB_DIR/output.log" 2>/dev/null || true
