module uim.mongo.classes.client;

import uim.mongo;

class DMGOClient {
  this() {}

  mixin(OProperty!("MongoClient", "client"));

  /// Disconnects all currently unused connections to the server.
  O cleanupConnections(this O)() {
    _client.cleanupConnections(); return cast(O)this;
  }	

  /// Connect
  auto connect (string adr) {
    return _client = connectMongoDB(adr);
  }

  /// Accesses a collection using an absolute path.
  auto collection (string path) {
    return _client.getCollection(path);
  }

  /// Returns an object representing the specified database.
  auto database(string dbName) {
    return _client.getDatabase(dbName);	
  }	

  /// Return a handle to all databases of the server.
  auto databases() {
    return _client.getDatabases();
  }
}
auto MGOClient() { return new DMGOClient; }

unittest{
  auto client = connectMongoDB("127.0.0.1");
  writeln("Databases");  
  foreach(db; client.getDatabases) {
    writeln("Database");
    writeln(db);  
    writeln(mgListCollections(db, false, true));
    writeln(mgListCollections(db, false, true)["cursor"]);
    foreach(b; mgListCollections(db, false, true)["cursor"]["firstBatch"]) writeln(b["name"]);
  }
  
  /*auto users = client.getCollection("users");
  users.insert(Bson("peter"));
  // connecting using the URL form with custom settings
  auto client = connectMongoDB("mongodb://localhost/?slaveOk=true");
  // connecting with SSL encryption enabled and verification off
  auto client = connectMongoDB("mongodb://localhost/?ssl=true&sslverifycertificate=false");*/
}