#!/bin/bash
set -e

echo 'MongoDB başlatılıyor...'

# Keyfile oluştur
KEYFILE=/tmp/mongo-keyfile
openssl rand -base64 756 > $KEYFILE
chmod 600 $KEYFILE
chown mongodb:mongodb $KEYFILE

# MongoDByi backgroundda başlat
mongod --bind_ip_all --replSet rs0 --port 27017 --keyFile $KEYFILE 

echo 'MongoDB başlatıldı, hazır olması bekleniyor...'

# MongoDB'nin gerçekten hazır olmasını bekle
for i in {1..60}; do
  if mongosh --quiet --eval 'db.adminCommand("ping")' >/dev/null 2>&1; then
    echo 'MongoDB hazır!'
    break
  fi
  echo "Deneme $i/60 - MongoDB henüz hazır değil..."
  sleep 2
done

# Replica set durumunu kontrol et
RS_STATUS=$(mongosh --quiet --eval 'try { rs.status(); print("EXISTS"); } catch(e) { print("NOT_EXISTS"); }' 2>/dev/null || echo 'ERROR')

if [[ "$RS_STATUS" == "NOT_EXISTS" ]] || [[ "$RS_STATUS" == "ERROR" ]]; then
  echo 'Replica set kuruluyor...'
  mongosh --quiet --eval '
    rs.initiate({
      _id: "rs0",
      members: [{ _id: 0, host: "127.0.0.1:27017" }]
    });
  ' || echo 'Replica set kurulumu hatası'

  # PRIMARY durumunu bekle
  echo 'PRIMARY durumu bekleniyor...'
  for i in {1..30}; do
    STATUS=$(mongosh --quiet --eval 'try { rs.status().members[0].stateStr; } catch(e) { "ERROR"; }' 2>/dev/null)
    if [[ "$STATUS" == "PRIMARY" ]]; then
      echo 'Replica set PRIMARY durumda!'
      break
    fi
    echo "Durum: $STATUS - Bekleniyor..."
    sleep 3
  done
else
  echo 'Replica set zaten mevcut'
fi

echo 'MongoDB replica set hazır!'

# Foreground'da çalıştır (log monitoring için)
exec mongod --bind_ip_all --replSet rs0 --port 9001 --keyFile $KEYFILE
