var ReplSet = require('./lib2/topologies/replset'),
  ReadPreference = require('./lib2/topologies/read_preference');

// Attempt to connect
var server = new ReplSet([{
  host: 'localhost', port: 31000
}, {
  host: 'localhost', port: 31001
}], {
  setName: 'rs'
});

function executeCursors(_server, cb) {
  var count = 100;

  for(var i = 0; i < 100; i++) {
    // Execute the write
    var cursor = _server.cursor('test.test', {
        find: 'test.test'
      , query: {a:1}
    }, {readPreference: new ReadPreference('secondary')});

    // Get the first document
    cursor.next(function(err, doc) {
      count = count - 1;
      if(err) console.dir(err)
      if(count == 0) return cb();
    });
  }
}

server.on('connect', function(_server) {
  console.log("---------------------------------- 0")
  // Attempt authentication
  _server.auth('scram-sha-1', 'admin', 'root', 'root', function(err, r) {
    console.log("---------------------------------- 1")
    // console.dir(err)
    // console.dir(r)

    _server.insert('test.test', [{a:1}], function(err, r) {
      console.log("---------------------------------- 2")
      console.dir(err)
      if(r)console.dir(r.result)
      var name = null;

      _server.on('joined', function(_t, _server) {
        if(name == _server.name) {
          console.log("=========== joined :: " + _t + " :: " + _server.name)
          executeCursors(_server, function() {
          });
        }
      })

      // var s = _server.s.replicaSetState.secondaries[0];
      // s.destroy({emitClose:true});
      executeCursors(_server, function() {
        console.log("============== 0")
        // Attempt to force a server reconnect
        var s = _server.s.replicaSetState.secondaries[0];
        name = s.name;
        s.destroy({emitClose:true});
        // console.log("============== 1")

        // _server.destroy();
        // test.done();
      });
    });
  });
});

server.connect();
