#!/usr/bin/env bash
# Sunucuda çalıştır: bash diagnose_livekit_server.sh
# Çıktının tamamını kopyalayıp paylaşın (JWT / API secret / şifre yapıştırmayın).
#
# İsteğe bağlı: dış test URL'si (varsayılan aşağıdaki)
#   LIVEKIT_PUBLIC_TEST_URL='https://livekit.novazeka.com.tr/rtc' bash diagnose_livekit_server.sh

set +e

PUBLIC_URL="${LIVEKIT_PUBLIC_TEST_URL:-https://livekit.novazeka.com.tr/rtc}"
LOCAL_LK="${LIVEKIT_LOCAL_HTTP:-http://127.0.0.1:7880/rtc}"

echo "########################################"
echo "# 0) Zaman / kullanıcı / hostname"
echo "########################################"
date -u 2>/dev/null || date
whoami
hostname -f 2>/dev/null || hostname

echo
echo "########################################"
echo "# 1) OS"
echo "########################################"
uname -a 2>/dev/null
test -r /etc/os-release && head -8 /etc/os-release

echo
echo "########################################"
echo "# 2) Dinleyen TCP portlar (7880–7882, 443, 80)"
echo "########################################"
if command -v ss >/dev/null 2>&1; then
  ss -lntp 2>/dev/null | grep -E ':7880|:7881|:7882|:443 |:443$|:80 |:80$' || true
else
  netstat -lntp 2>/dev/null | grep -E '7880|7881|7882|:443|:80' || true
fi

echo
echo "########################################"
echo "# 3) Docker — livekit / signal"
echo "########################################"
if command -v docker >/dev/null 2>&1; then
  docker ps -a --format 'table {{.Names}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}' 2>/dev/null | head -1
  docker ps -a --format '{{.Names}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}' 2>/dev/null | grep -iE 'livekit|signal' || echo "(livekit/signal isimli konteyner yok)"
else
  echo "docker komutu yok"
fi

echo
echo "########################################"
echo "# 4) systemd — livekit"
echo "########################################"
if command -v systemctl >/dev/null 2>&1; then
  systemctl list-units --type=service --all 2>/dev/null | grep -i livekit || echo "(livekit servis unit yok)"
else
  echo "systemctl yok"
fi

echo
echo "########################################"
echo "# 5) nginx"
echo "########################################"
if command -v nginx >/dev/null 2>&1; then
  nginx -v 2>&1
  nginx -t 2>&1
  echo "-- /etc/nginx altında livekit|7880|novazeka/livekit (ilk 40 eşleşme) --"
  grep -RIn --include='*.conf' -E 'livekit|7880|/novazeka/livekit' /etc/nginx/ 2>/dev/null | head -40 || echo "(eşleşme yok veya okunamıyor)"
else
  echo "nginx yok"
fi

echo
echo "########################################"
echo "# 6) Apache"
echo "########################################"
if command -v apache2ctl >/dev/null 2>&1; then
  apache2ctl -v 2>&1
elif command -v httpd >/dev/null 2>&1; then
  httpd -v 2>&1
else
  echo "apache2ctl/httpd yok"
fi

echo
echo "########################################"
echo "# 7) Yerel LiveKit — WebSocket el sıkışması (beklenen: 101 veya 401/404 LiveKit; KÖTÜ: 200 + uzun HTML)"
echo "    URL: $LOCAL_LK"
echo "########################################"
curl -sS -D - -o /dev/null -m 8 --http1.1 \
  -H 'Connection: Upgrade' \
  -H 'Upgrade: websocket' \
  -H 'Sec-WebSocket-Version: 13' \
  -H 'Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==' \
  "$LOCAL_LK" 2>&1 | head -30

echo
echo "########################################"
echo "# 8) Dış adres (TLS) — tarayıcının gördüğü yol"
echo "    URL: $PUBLIC_URL"
echo "########################################"
curl -sS -D - -o /dev/null -m 15 --http1.1 \
  -H 'Connection: Upgrade' \
  -H 'Upgrade: websocket' \
  -H 'Sec-WebSocket-Version: 13' \
  -H 'Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==' \
  "$PUBLIC_URL" 2>&1 | head -35

echo
echo "########################################"
echo "# 9) İşlem listesi (livekit kelimesi)"
echo "########################################"
ps aux 2>/dev/null | grep -iE '[l]ivekit|[l]k-' || echo "(livekit süreç adı görünmüyor)"

echo
echo "=== Bitti. Çıktıyı olduğu gibi paylaşın. ==="
