#!/usr/bin/env bash
# Sunucuda bir kez: Redis host:6379 + Egress düzeltmesi (nova_livekit durdurulmaz).
# Kullanım: bash fix_redis_egress_once.sh
# veya: cd .../livekit-selfhost && bash fix_redis_egress_once.sh

set -euo pipefail
# Not: Bu dosyayı "bash fix_redis_egress_once.sh" ile çalıştırın; satır satır yapıştırmayın (exit SSH’i kapatır).

COMPOSE_DIR="${COMPOSE_DIR:-/home/novazekacom/public_html/novazeka/livekit-selfhost}"
cd "$COMPOSE_DIR" || {
  echo "Dizin yok: $COMPOSE_DIR — COMPOSE_DIR=/tam/yol ile çalıştırın."
  exit 1
}

echo "=== [1/5] Ortak Docker ağı (sabit isim — head -1 kullanmayın; sıra rastgele) ==="
# livekit-redis ve nova_livekit aynı kullanıcı tanımlı ağda olmalı; yoksa 'lookup livekit-redis: i/o timeout'.
NET="${LIVEKIT_DOCKER_NET:-livekit-nova}"
if ! docker network inspect "$NET" >/dev/null 2>&1; then
  docker network create "$NET"
fi
echo "Ağ: $NET"

echo "=== [2/5] Eski Redis durduruluyor ==="
docker stop livekit-redis 2>/dev/null || true
if docker rm -f livekit-redis 2>/dev/null; then
  echo "livekit-redis silindi."
else
  echo "UYARI: rm başarısız (overlay busy). İsim serbest bırakılıyor: rename..."
  docker rename livekit-redis "livekit-redis_zombie_$(date +%s)" 2>/dev/null || true
  if docker ps -a --format '{{.Names}}' | grep -q '^livekit-redis$'; then
    echo "Hâlâ 'livekit-redis' var. Şunları çalıştırıp betiği yeniden deneyin:"
    echo "  systemctl restart docker && sleep 15 && docker rm -f livekit-redis"
    exit 3
  fi
fi

echo "=== [3/5] Redis yeniden: $NET + 127.0.0.1:6379 (Egress host modu için) ==="
docker run -d \
  --name livekit-redis \
  --restart unless-stopped \
  --network "$NET" \
  -p 127.0.0.1:6379:6379 \
  redis:7-alpine \
  redis-server \
  --bind 0.0.0.0 \
  --port 6379 \
  --maxmemory 256mb \
  --maxmemory-policy allkeys-lru

sleep 2
echo "=== [4/5] Host 127.0.0.1:6379 testi ==="
docker run --rm --network host redis:7-alpine redis-cli -h 127.0.0.1 -p 6379 ping

echo "=== [4b/5] LiveKit’i Redis ile aynı ağa bağla (DNS: livekit-redis) ==="
if docker inspect nova_livekit >/dev/null 2>&1; then
  docker network connect "$NET" nova_livekit 2>/dev/null && echo "nova_livekit → $NET bağlandı." || echo "nova_livekit zaten $NET üzerinde veya bağlanamadı (çıktıyı kontrol edin)."
fi

echo "=== [5/5] LiveKit + Egress yeniden başlat ==="
docker restart nova_livekit 2>/dev/null || true
sleep 4
if docker inspect nova_livekit >/dev/null 2>&1; then
  docker exec nova_livekit getent hosts livekit-redis 2>/dev/null || echo "UYARI: nova_livekit içinde livekit-redis çözülmedi — ağları kontrol edin."
fi

if [ ! -f .env ]; then
  echo "EGRESS_HOST_RECORDINGS_DIR=${COMPOSE_DIR}/recordings" >> .env
  echo ".env oluşturuldu (EGRESS_HOST_RECORDINGS_DIR)."
fi

docker compose up -d --no-deps --force-recreate egress

echo ""
echo "=== Özet ==="
docker ps --format 'table {{.Names}}\t{{.Status}}' | egrep 'livekit|egress|redis|nova_livekit' || true
echo ""
docker compose logs --tail=25 egress
echo ""
echo "Egress’te artık 'connection refused' to Redis olmamalı. Kayıt deneyin."
echo "Not: egress.yaml api_key/api_secret ile livekit.yaml keys: aynı olmalı (KURULUM.txt §6)."
