#!/usr/bin/env bash
set -euo pipefail

# 主机级 Teleport 服务安装：
# 1. 检查 Discover 生成的 /etc/teleport.yaml
# 2. 安装 supervisor 主配置
# 3. 安装 teleport 进程配置
# 4. 启动或重载 supervisord

if [ "$(id -u)" -ne 0 ]; then
  echo "请使用 root 执行，例如：sudo bash install_teleport_service.sh"
  exit 1
fi

company_root="/opt/inqai"
runtime_root="${company_root}/runtime"
supervisor_conf="${runtime_root}/supervisor/supervisord.conf"
teleport_conf="${runtime_root}/supervisor/conf.d/teleport.conf"
supervisor_sock="${runtime_root}/supervisor/supervisor.sock"
supervisor_pid="${runtime_root}/run/supervisord.pid"

if ! command -v teleport >/dev/null 2>&1; then
  echo "未找到 teleport，请先按 Teleport Discover 页面生成的命令安装。"
  exit 1
fi

if [ ! -f /etc/teleport.yaml ]; then
  echo "缺少 /etc/teleport.yaml"
  echo "请先执行 Teleport Discover 页面生成的安装命令。"
  exit 1
fi

install -d -m 0755 \
  "${runtime_root}/logs" \
  "${runtime_root}/run" \
  "${runtime_root}/supervisor/conf.d"

cat >"$supervisor_conf" <<'EOF'
[unix_http_server]
file=/opt/inqai/runtime/supervisor/supervisor.sock
chmod=0700

[supervisord]
logfile=/opt/inqai/runtime/logs/supervisord.log
pidfile=/opt/inqai/runtime/run/supervisord.pid
childlogdir=/opt/inqai/runtime/logs
nodaemon=false

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///opt/inqai/runtime/supervisor/supervisor.sock

[include]
files = /opt/inqai/runtime/supervisor/conf.d/*.conf
EOF

cat >"$teleport_conf" <<'EOF'
[program:teleport]
command=/usr/bin/env teleport start --config=/etc/teleport.yaml
directory=/
autostart=true
autorestart=unexpected
exitcodes=0
priority=10
stdout_logfile=/opt/inqai/runtime/logs/teleport.stdout.log
stderr_logfile=/opt/inqai/runtime/logs/teleport.stderr.log
EOF

if [ -S "$supervisor_sock" ] && supervisorctl -c "$supervisor_conf" status >/dev/null 2>&1; then
  supervisorctl -c "$supervisor_conf" reread >/dev/null || true
  supervisorctl -c "$supervisor_conf" update >/dev/null || true
  supervisorctl -c "$supervisor_conf" restart teleport >/dev/null || true
else
  rm -f "$supervisor_pid"
  supervisord -c "$supervisor_conf"
fi

for _ in $(seq 1 30); do
  status="$(supervisorctl -c "$supervisor_conf" status teleport 2>/dev/null || true)"
  if printf '%s\n' "$status" | grep -q "RUNNING"; then
    printf '%s\n' "$status"
    break
  fi
  sleep 1
done

if ! supervisorctl -c "$supervisor_conf" status teleport | grep -q "RUNNING"; then
  echo "Teleport 未成功进入 RUNNING。"
  tail -n 100 "${runtime_root}/logs/teleport.stderr.log" || true
  exit 1
fi

echo "Teleport 服务已接入 supervisord。"
echo "下一步："
echo "  tsh ls"
echo "  然后执行 bootstrap/host/windows_start_wsl_service.ps1"
