#!/bin/bash
# ============================================================================
# update-mesin.sh — refresh mesin EXISTING dari S3 provisioning (tanpa re-provision)
#
# Yang di-update:
#   1. Tooling /opt/data/jobseeker/ (report-application v2, portal-check v3, dll)
#   2. venv-cdp + websocket-client (dibuat bila belum ada)
#   3. Skill jobseeker-agent (via hermes skills install → path benar)
#   4. cron-vnc-check.sh (watchdog VNC + portal-check; salinan aktif)
#
# Pakai:  bash update-mesin.sh
# Sumber: S3 provisioning (default) — override: SRC_BASE=<url> bash update-mesin.sh
# Aman dijalankan ulang (idempotent). Secret (agent-config.env) TIDAK disentuh.
# ============================================================================
set -u
SRC_BASE="${SRC_BASE:-https://s3-autoapply-public.s3.ap-southeast-1.amazonaws.com/provision}"
HERMES_BIN="${HERMES_BIN:-/opt/hermes/bin/hermes}"
HERMES_HOME="${HERMES_HOME:-/opt/data}"
JS_DIR="$HERMES_HOME/jobseeker"
VNC_DIR="$HERMES_HOME/home/vncsetup"

fail() { echo "ERROR: $1" >&2; exit 1; }
info() { echo "[update] $1"; }

# ── 0b. model.api_mode (kompatibilitas provider) ────────────────────────────
# Provider (ai.sumopod.com) tidak punya /responses → Hermes default 'responses'
# menghasilkan 404 model not found. Wajib chat_completions.
if [ "$("$HERMES_BIN" config get model.api_mode 2>/dev/null | tr -d '[:space:]')" != "chat_completions" ]; then
  "$HERMES_BIN" config set model.api_mode chat_completions >/dev/null 2>&1 \
    && info "model.api_mode → chat_completions" \
    || fail "gagal set model.api_mode"
else
  info "model.api_mode sudah chat_completions"
fi

# ── 1. Tooling ───────────────────────────────────────────────────────────────
mkdir -p "$JS_DIR"
TOOLS="accounts.py check-quota.py report-application.py sync-profile.py portal-check.py vnc-token.py test_be_listener.py agent-config.env.example"
for f in $TOOLS; do
  curl -fsSL "$SRC_BASE/$f" -o "$JS_DIR/$f" || fail "gagal unduh $f dari $SRC_BASE"
done
chmod +x "$JS_DIR"/*.py 2>/dev/null
info "tooling ter-update: $(ls "$JS_DIR" | wc -l) file di $JS_DIR"
# verifikasi versi tooling berisi kontrak terbaru (endpoint /v1/agent, data.items, status skipped)
if ! grep -q "items" "$JS_DIR/report-application.py" 2>/dev/null; then
  fail "report-application.py di S3 belum versi terbaru (tidak ada data.items) — cek S3/manifest"
fi
info "tooling terverifikasi: kontrak terbaru (items/skipped) ada"

# ── 2. venv-cdp (untuk portal-check.py — WebSocket CDP) ─────────────────────
if [ ! -x "$HERMES_HOME/venv-cdp/bin/python" ]; then
  info "membuat venv-cdp + websocket-client..."
  uv venv "$HERMES_HOME/venv-cdp" 2>/dev/null || python3 -m venv "$HERMES_HOME/venv-cdp"
  uv pip install --python "$HERMES_HOME/venv-cdp/bin/python" websocket-client >/dev/null 2>&1 \
    || "$HERMES_HOME/venv-cdp/bin/pip" install -q websocket-client
fi
"$HERMES_HOME/venv-cdp/bin/python" -c "import websocket" 2>/dev/null \
  || fail "websocket-client tidak terpasang di venv-cdp"
info "venv-cdp siap"

# ── 2b. pymupdf (baca/parse CV PDF — pretest & verifikasi kriteria) ─────────
if ! "$HERMES_HOME/venv-cdp/bin/python" -c "import pymupdf" 2>/dev/null; then
  info "menginstall pymupdf (baca PDF/CV)..."
  uv pip install --python "$HERMES_HOME/venv-cdp/bin/python" pymupdf >/dev/null 2>&1 \
    || "$HERMES_HOME/venv-cdp/bin/pip" install -q pymupdf
fi
"$HERMES_HOME/venv-cdp/bin/python" -c "import pymupdf" 2>/dev/null \
  || fail "pymupdf tidak terpasang di venv-cdp"
info "pymupdf siap"

# ── 3. Skill jobseeker (base + 5 portal) ────────────────────────────────────
for sfx in jobseeker-agent-SKILL.md jobseeker-portal-jobstreet-SKILL.md jobseeker-portal-glints-SKILL.md \
           jobseeker-portal-linkedin-SKILL.md jobseeker-portal-indeed-SKILL.md jobseeker-portal-kalibrr-SKILL.md; do
  if "$HERMES_BIN" skills install "$SRC_BASE/$sfx" --category jobseeker --yes >/dev/null 2>&1; then
    info "skill $sfx ter-update"
  else
    name="${sfx%-SKILL.md}"
    mkdir -p "$HERMES_HOME/skills/jobseeker/$name"
    curl -fsSL "$SRC_BASE/$sfx" -o "$HERMES_HOME/skills/jobseeker/$name/SKILL.md" || fail "gagal unduh skill $sfx"
    info "skill $sfx ter-update (fallback manual)"
  fi
done

# ── 4. cron-vnc-check.sh (salinan aktif + salinan vncsetup) ─────────────────
for dst in "$HERMES_HOME/scripts/cron-vnc-check.sh" "$VNC_DIR/cron-vnc-check.sh"; do
  mkdir -p "$(dirname "$dst")"
  curl -fsSL "$SRC_BASE/cron-vnc-check.sh" -o "$dst" || fail "gagal unduh cron-vnc-check.sh"
  chmod +x "$dst"
done
info "cron-vnc-check.sh ter-update (aktif + vncsetup)"

echo
echo "[update] SELESAI — restart gateway agar config & service baru aktif:"
echo "  $HERMES_BIN gateway restart"
echo "[update] Verifikasi: cd $JS_DIR && python3 report-application.py pick --limit 1"
exit 0
