module dubregistry.mongodb;

import vibe.core.log;
import vibe.db.mongo.client : MongoClient;
import vibe.db.mongo.mongo : connectMongoDB;
import vibe.db.mongo.settings : MongoClientSettings, MongoAuthMechanism, parseMongoDBUrl;
import std.typecons : Nullable;

string databaseName = "vpmreg";
private Nullable!MongoClientSettings _mongoSettings;

@safe:

MongoClientSettings mongoSettings() {
	if (_mongoSettings.isNull) {
		import std.process : environment;
		auto mongodbURI = environment.get("MONGODB_URI", environment.get("MONGO_URI", "mongodb://127.0.0.1"));
		logInfo("Found mongodbURI: %s", mongodbURI);
		MongoClientSettings settings;
		parseMongoDBUrl(settings, mongodbURI);
		settings.authMechanism = MongoAuthMechanism.scramSHA1;
		if (settings.database.length > 0)
			databaseName = settings.database;
		settings.safe = true;
		_mongoSettings = settings;
	}
	return _mongoSettings.get;
}

MongoClient getMongoClient()
{
	return connectMongoDB(mongoSettings);
}