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

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

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

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

PID="$(cat "$JOB_DIR/pid" 2>/dev/null || true)"
if [[ -n "$PID" ]] && kill -0 "$PID" 2>/dev/null; then
  kill "$PID" 2>/dev/null || true
  for _ in 1 2 3 4 5; do
    if ! kill -0 "$PID" 2>/dev/null; then
      break
    fi
    sleep 1
  done
  if kill -0 "$PID" 2>/dev/null; then
    kill -9 "$PID" 2>/dev/null || true
  fi
fi

printf 'stopped\n' > "$JOB_DIR/status"
date -u +"%Y-%m-%dT%H:%M:%SZ" > "$JOB_DIR/finished_at"
[[ -f "$JOB_DIR/exit_code" ]] || printf '143\n' > "$JOB_DIR/exit_code"

echo "stopped $JOB_ID"
