#!/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"
# ★ CODE_ROOT = clean main worktree(origin/main #186/#187). DATA(flag/lock/events)는 WORKSPACE(canonical) 유지.
CODE_ROOT="${PICKUP_CODE_ROOT:-${HOME}/p0b-pickup-main}"

# ── 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

# ── CODE_ROOT 검증 (fail-closed) ──
#   CODE_ROOT 부재 또는 driver 파일 부재 시 no-op (exit 0) + stderr 1줄.
#   DATA(flag/lock)는 위에서 이미 canonical 기준으로 처리됨 (enable 안 했으면 어차피 no-op).
if [[ ! -d "${CODE_ROOT}" ]] || [[ ! -f "${CODE_ROOT}/dispatch/anu_pickup_driver.py" ]]; then
  echo "anu-pickup: CODE_ROOT 부재 또는 driver 파일 누락 (${CODE_ROOT}) — no-op" >&2
  exit 0
fi

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