#!/bin/bash
# 라이브 오피스(localhost:8899)를 Tailscale Funnel로 '고정 공개 URL'(*.ts.net)에 노출.
# 사전조건(원장, 1회): ① Tailscale 앱 설치(App Store '검색: Tailscale' 또는 tailscale.com/download/mac)
#                       ② 앱에서 csy0136@gmail.com 로 로그인
#                       ③ 앱 메뉴 → 'Install CLI...' (없으면 App Store판이라 자동 인식)
# 그 다음 이 스크립트를 1회 실행하면 끝. (재부팅 후에도 Funnel은 앱이 유지)
set -e
PORT=8899

# 1) tailscale CLI 찾기
TS=""
for c in /usr/local/bin/tailscale /opt/homebrew/bin/tailscale "/Applications/Tailscale.app/Contents/MacOS/Tailscale"; do
  [ -x "$c" ] && TS="$c" && break
done
[ -z "$TS" ] && { echo "🔴 tailscale CLI 못 찾음 → Tailscale 앱 설치 후 'Install CLI' 하고 다시 실행."; exit 1; }
echo "tailscale CLI: $TS"

# 2) 로그인 확인
if ! "$TS" status >/dev/null 2>&1; then
  echo "🔴 아직 로그인 안 됨 → Tailscale 앱에서 csy0136@gmail.com 로 로그인 먼저."; exit 1
fi
echo "로그인 OK:"; "$TS" status 2>/dev/null | head -2

# 3) Funnel 켜기(백그라운드 상주)
echo "Funnel 켜는 중 (포트 $PORT)…"
if ! "$TS" funnel --bg "$PORT" 2>&1; then
  echo "⚠️ Funnel 실패 — 보통 tailnet 정책에서 Funnel 미허용."
  echo "   위 출력의 admin 링크(login.tailscale.com/admin) 에서 HTTPS 인증서 + Funnel 허용 후 다시 실행."
  exit 1
fi

# 4) 고정 URL 추출 → 기록
URL=$("$TS" funnel status 2>/dev/null | grep -oE 'https://[a-z0-9.-]+\.ts\.net[^ ]*' | head -1)
[ -z "$URL" ] && URL=$("$TS" status --json 2>/dev/null | python3 -c 'import sys,json;print("https://"+json.load(sys.stdin)["Self"]["DNSName"].rstrip("."))' 2>/dev/null)
if [ -n "$URL" ]; then
  echo "$URL" > /Users/choe/ops-watch/PUBLIC_URL.txt
  echo "✅ 고정 공개 URL: $URL"
  echo "   (→ /Users/choe/ops-watch/PUBLIC_URL.txt 갱신, 재시작해도 안 바뀜)"
  echo "   이제 cloudflare quick tunnel은 꺼도 됨: launchctl bootout gui/$(id -u)/com.choe.ops-tunnel"
else
  echo "⚠️ Funnel은 켜진 듯한데 URL 파싱 실패 → '$TS funnel status' 직접 확인."
fi
