#!/bin/bash
# 依頼箱の見張り係を、偽の claude で確かめる（Linux の作業環境で動かす）
# 使い方: bash test_inbox_runner.sh <inbox_runner.py があるフォルダ>
set -u
SRC="$(cd "$1" && pwd)"
T="$(mktemp -d)"
mkdir -p "$T/run" "$T/box/新規" "$T/work" "$T/other"
cp "$SRC/inbox_runner.py" "$SRC/settings.json" "$T/run/"
export FAKE_LOG="$T/fake.log"

# 偽の claude：渡された環境変数を記録し、依頼文の言葉で振る舞いを変える
cat > "$T/fakeclaude" <<'EOF'
#!/bin/bash
if [ "$1" = "--version" ]; then echo "2.1.311 (fake)"; exit 0; fi
echo "key=${ANTHROPIC_API_KEY:-なし} mcp=${ENABLE_CLAUDEAI_MCP_SERVERS:-なし}" > "$FAKE_LOG"
[ -n "${ANTHROPIC_API_KEY:-}" ] && echo "⚠ claude.ai connectors are disabled because ANTHROPIC_API_KEY or another auth source is set" >&2
if grep -q "少し待つ" <<<"$2"; then sleep 5; fi
if grep -q "置いていく" <<<"$2"; then nohup sleep 200 >/dev/null 2>&1 & fi
if grep -q "眠る" <<<"$2"; then
  trap 'echo "{\"result\":\"中断\",\"is_error\":true}"; exit 130' INT
  sleep 300 & wait
fi
echo '{"type":"result","is_error":false,"result":"やったこと：確認\n決めてほしいこと：なし","session_id":"abc-123","permission_denials":[{"tool_name":"Bash","tool_input":{"command":"git clean -fd"}}]}'
EOF
chmod +x "$T/fakeclaude"

python3 - "$SRC/config.json" "$T" <<'EOF'
import json, sys
c = json.load(open(sys.argv[1], encoding="utf-8"))
t = sys.argv[2]
c.update(inbox=f"{t}/box", allowed_dirs=[f"{t}/work"], claude=f"{t}/fakeclaude",
         settle_seconds=0, default_limit_minutes=1)
json.dump(c, open(f"{t}/run/config.json", "w", encoding="utf-8"), ensure_ascii=False)
EOF

req() { printf -- '---\n作業フォルダ: %s\n%s---\n%s\n' "$2" "$3" "$4" > "$T/box/新規/$1.md"; }

echo "== 確かめ1：設定の確かめ（APIキーが設定された窓）"
ANTHROPIC_API_KEY=dummy-not-a-key python3 "$T/run/inbox_runner.py" --check

echo; echo "== 確かめ2：正常／自動で回さない場所／頭の項目なし／子のプロセスを残す／時間切れ"
req 01_ok "$T/work" "" "疎通確認です"
req 02_ng "$T/other" "" "だめな場所"
printf 'ヘッダなし\n' > "$T/box/新規/03_nohead.md"
req 04_leave "$T/work" "" "置いていく依頼"
req 05_sleep "$T/work" "上限時間: 1
" "眠る依頼"
mkdir -p "$T/box/実行中"; echo "x" > "$T/box/実行中/00_stuck.md"
START=$(date +%s)
ANTHROPIC_API_KEY=dummy-not-a-key timeout 200 python3 "$T/run/inbox_runner.py" --once
echo "かかった秒数: $(( $(date +%s) - START ))"
echo "偽の claude が受け取った環境: $(cat "$FAKE_LOG")"

echo; echo "== フォルダの中身"
(cd "$T/box" && find . -type f | sort)
for f in "$T"/box/結果/*.md; do echo; echo "---- $(basename "$f")"; sed -n '1,3p;/## Claude Code の報告/,$p' "$f"; done

echo; echo "== 確かめ3：APIキーを外さない設定にしたとき、報告に★が付くか"
python3 - "$T/run/config.json" <<'EOF'
import json, sys
c = json.load(open(sys.argv[1], encoding="utf-8")); c["drop_env"] = []
json.dump(c, open(sys.argv[1], "w", encoding="utf-8"), ensure_ascii=False)
EOF
req 06_key "$T/work" "" "キーの確かめ"
ANTHROPIC_API_KEY=dummy-not-a-key python3 "$T/run/inbox_runner.py" --once
echo "偽の claude が受け取った環境: $(cat "$FAKE_LOG")"
grep "★" "$T"/box/結果/06_key_*.md

echo; echo "== 確かめ4：2つ目の見張り係は起動しない"
req 07_wait "$T/work" "" "少し待つ依頼"
python3 "$T/run/inbox_runner.py" --once & P=$!
sleep 1; python3 "$T/run/inbox_runner.py" --once; echo "2つ目の終了コード: $?"; wait $P
pkill -f "sleep 200" 2>/dev/null; pkill -f "sleep 300" 2>/dev/null
rm -rf "$T"
