#!/usr/bin/env bash
# task-2721 P0-b — ANU pickup entrypoint (systemd .service oneshot 가 호출).
# default DISABLED. activation flag 부재/비활성 시 전면 no-op (exit 0).
# driver 레벨 flock single-flight 로 중첩 실행 차단.
# ★ ANU key/secret 인자 전달 0 — argv 에 키 literal 0. key 는 driver 가 .env.keys 로 런타임 로드.
set -euo pipefail

WORKSPACE="${HOME}/workspace"

# ── 1. activation flag 확인 (default DISABLED) ────────────────────────────────
#   memory/state/p0b_driver_enabled 의 첫 줄 trim 값이 정확히 "enabled" 일 때만 진행.
#   파일 부재 / "disabled" / 임의 값 → no-op (exit 0).
FLAG_FILE="${WORKSPACE}/memory/state/p0b_driver_enabled"
if [[ ! -f "${FLAG_FILE}" ]]; then
  exit 0
fi
FLAG_VALUE="$(head -n 1 "${FLAG_FILE}" 2>/dev/null | tr -d '[:space:]' || true)"
if [[ "${FLAG_VALUE}" != "enabled" ]]; then
  # "disabled" 포함 그 외 모든 값 → no-op (비상 차단).
  exit 0
fi

# ── 2. driver 레벨 flock single-flight (중첩 방지) ────────────────────────────
# UID 분리 + 안전 경로: XDG_RUNTIME_DIR(사용자 전용 0700) 우선,
# 없으면 workspace 내부 경로(memory/p0b_state/locks) 사용.
# ★ world-writable 경로 고정 사용 중단 — symlink/truncation 위험 회피(HIGH fix).
PICKUP_UID="$(id -u)"
if [[ -n "${XDG_RUNTIME_DIR:-}" && -d "${XDG_RUNTIME_DIR}" ]]; then
  LOCK_DIR="${XDG_RUNTIME_DIR}"
else
  LOCK_DIR="${WORKSPACE}/memory/p0b_state/locks"
fi
# parent dir 존재/권한 보장 (소유자 한정 0700)
mkdir -p "${LOCK_DIR}"
chmod 700 "${LOCK_DIR}" 2>/dev/null || true
LOCK="${LOCK_DIR}/anu-pickup-${PICKUP_UID}.driver.lock"
# symlink 거부: lock 경로가 심볼릭 링크면 차단 (truncation/redirect 방지)
if [[ -L "${LOCK}" ]]; then
  exit 0
fi
exec 9>"${LOCK}"
if ! flock -n 9; then
  # 이미 다른 driver 인스턴스가 실행 중 → 중첩 회피 no-op.
  exit 0
fi

# ── 3. driver 호출 (key/secret 인자 전달 0) ───────────────────────────────────
cd "${WORKSPACE}"
PYTHONPATH="${WORKSPACE}" python3 -m dispatch.anu_pickup_driver
