#!/usr/bin/env bash
# 手元（Mac）から VM の `thth` を呼ぶ薄いラッパ（masaru 指摘 2026-09-10）。
#
# **なぜ要るか。** 各プロジェクトのセッションは `ssh wt 'PATH=...; thth ...'` と
# 打っていた。安全で特定の作業をするために、いちばん鈍器な道具（生の ssh）を
# 持たせていたことになる。実際、権限判定に何度も弾かれ、ループの形では止められた。
# **道具を特定にすれば、許可も特定にできる**（`Bash(thth:*)` の 1 行で済む）。
#
# 引数はそのまま VM の `thth` に渡す。手元のシェルに展開させない
# （VM 側のパスは手元に存在しないので、glob は使わずディレクトリを渡すこと）。
# 秘密を対話で入れるもの（`token set`・`auth`・`admin secret set`（旧名 `admin approver set`））と、招待 URL を tty に 1 回だけ出す
# `admin invite`（3.10.0）だけ tty を割り当てる——tty が
# 無いと getpass がエコーを止められず、**手元の画面にトークンが出る**。
set -euo pipefail

# thth-remote-wrapper（この印で、PATH 上の `thth` がこのラッパ自身か pip の `thth` かを見分ける）
#
# 3.14.2: `login`・`logout` だけは手元の `thth`（pip）に渡す。ブラウザ式の `thth login` は
# 手元の `~/.config/thth/remote.json` に鍵を置く命令で、VM で打つと VM に置かれてしまう。
# それ以外は今までどおり VM。遠くの道（remote.json）を手元で確かめるときは `python3 -m thth …` か
# pip の `thth` の絶対パスで打つ（このラッパは VM 行き）。
case "${1:-}" in
  login|logout)
    if [ -n "${THTH_LOCAL:-}" ]; then
      exec "$THTH_LOCAL" "$@"
    fi
    # 配列を使わない（macOS 既定の bash 3.2 は `set -u` の下で空配列の展開に落ちる）。
    set -f; OLD_IFS="$IFS"; IFS=:
    for dir in ${PATH:-}; do
      candidate="${dir:-.}/thth"
      if [ -f "$candidate" ] && [ -x "$candidate" ] && ! grep -q 'thth-remote-wrapper' "$candidate" 2>/dev/null; then
        IFS="$OLD_IFS"; set +f
        exec "$candidate" "$@"
      fi
    done
    IFS="$OLD_IFS"; set +f
    exec python3 -m thth "$@"
    ;;
esac

HOST="${THTH_SSH_HOST:-wt}"
REMOTE='PATH="$HOME/.local/bin:$PATH"; exec thth'
for arg in "$@"; do
  REMOTE+=" $(printf '%q' "$arg")"
done

# `set -u` の下で空配列を展開すると古い bash（macOS 既定の 3.2）で落ちるので、
# 文字列で持つ（引数は 1 つだけなので分割の心配が無い）。
TTY_FLAG=""
case "${1:-} ${2:-} ${3:-}" in
  "token set "*|"auth "*|"admin invite create"|"admin secret set"|"admin approver set"|"approver set "*) TTY_FLAG="-t" ;;
esac

if [ -n "$TTY_FLAG" ]; then
  exec ssh -t "$HOST" "$REMOTE"
fi
exec ssh "$HOST" "$REMOTE"
