#!/bin/bash
set -e

KEYFILE=/data/configdb/mongo-keyfile

# Keyfile yoksa oluştur ve izinlerini ayarla
if [ ! -f "$KEYFILE" ]; then
  echo "🔑 Creating keyfile..."
  mkdir -p /data/configdb
  openssl rand -base64 756 > "$KEYFILE"
  chmod 600 "$KEYFILE"
  chown 999:999 "$KEYFILE" 2>/dev/null || true
else
  echo "🔑 Keyfile already exists"
  chmod 600 "$KEYFILE"
  chown 999:999 "$KEYFILE" 2>/dev/null || true
fi

# MongoDB’yi başlat (arka planda, auth ile) 127.0.0.1 mongodb
mongod --replSet rs0 --keyFile "$KEYFILE" --bind_ip_all --port 9001 --auth --fork --keyFile /data/configdb/mongo-keyfile

# MongoDB açılana kadar bekle
echo "⏳ Waiting for mongod to be ready..."
for i in {1..60}; do
  if mongosh -u fikoyt -p fikoyt1299 --authenticationDatabase admin --quiet --eval 'db.adminCommand("ping")' >/dev/null 2>&1; then
    echo "✅ mongod ready"
    break
  fi
  echo "Waiting... ($i/60)"
  sleep 2 
done

# Replika set başlat
echo "⚡ Initiating replSet..."
mongosh -u fikoyt -p fikoyt1299 --authenticationDatabase admin --quiet <<EOF || true
try {
  rs.status();
  print("RS_ALREADY_INIT");
} catch (e) {
  rs.initiate({
    _id: "rs0",
    members: [{ _id: 0, host: "localhost:27017" }]
  });
  print("RS_INIT_DONE");
}
EOF

# Kullanıcıları oluştur
echo "👤 Creating users..."
mongosh -u fikoyt -p fikoyt1299 --authenticationDatabase admin --quiet <<EOF || true
db = db.getSiblingDB("admin");
try {
  db.createUser({
    user: "fikoyt",
    pwd: "fikoyt1299",
    roles: [ { role: "root", db: "admin" } ]
  });
  print("Admin user created");
} catch(e) {
  print("Admin user already exists");
}

db = db.getSiblingDB("fikoyt");
try {
  db.createUser({
    user: "fikoyt",
    pwd: "fikoyt1299",
    roles: [ { role: "readWrite", db: "fikoyt" } ]
  });
  print("App user created");
} catch(e) {
  print("App user already exists");
}
EOF

# mongot search kullanıcısı oluştur
echo "🔍 Creating mongot search user..."
mongosh -u fikoyt -p fikoyt1299 --authenticationDatabase admin --quiet <<EOF || true
db = db.getSiblingDB("admin");
try {
  db.createUser({
    user: "mongotUser",
    pwd: "fikoytMongot1299",
    roles: [ { role: "searchCoordinator", db: "admin" } ]
  });
  print("mongot user created");
} catch(e) {
  print("mongot user already exists");
}
EOF

echo "🎉 init script finished"
