//mongojs implmentation
var mongodb = require('mongodb');
var mongojs = require('mongojs');
//Logging to file for troubleshooting
var fs = require('fs');
var util = require('util');
var log_file = fs.createWriteStream(__dirname + '/debug.log', {flags : 'w'});
var log_stdout = process.stdout;
//debug logs to file for varying responses can be removed if not required
var mylog = function(d) {
  log_file.write(util.format(d) + '\n');
};
var db = mongojs('127.0.0.1:27017/tcdisrupt',['contextcollection', 'usercollection'])
//database events
db.on('connect', function () {
    console.log('database connected')
});
db.on('error', function (err) {
    console.log('database error', err)
});

//CRUD components
exports.createUserContext = function(emailString, roomIdString,userString, callback){
	var newDoc = {
		email: emailString,
		roomId: roomIdString,
		user: userString,
		orderComplete: "new",
	};
	db.contextcollection.insert(newDoc, function(err, res){
		if(err){
			return console.log(err)
		}
		callback(res);
	});
};

exports.findUserContext = function(emailString,roomIdString, callback){
	db.contextcollection.find({email: emailString, roomId: roomIdString}, function(err,res){
		console.log('User found');
		if(err){
			return console.log(err);
		}
		callback(res[0]);
	});
};
exports.replaceUserContext = function(emailString, roomIdString, newContext, callback){
	db.contextcollection.remove({email: emailString, roomId: roomIdString}, function(err, res){
		if(err){
			return console.log(err);
		}
		console.log('Orignal context removed');
		db.contextcollection.insert(newContext, function(err, res){
			if(err){
				return console.log(err);
			}
			console.log('User updated with new context');
			callback(res);
		});
	});
};
exports.updateUserContext = function(emailString, callback){
	db.contextcollection.update({email: emailString},{$set:{orderComplete:'true'}},
		function(err,doc){
		if(err){
			return console.log(err)
		}
		mylog(doc);
		callback(doc);
	})
};
//user collection
exports.createUserAccount = function(emailString, callback){
	var newUserDoc = {
		email: emailString,
		orderComplete: "false"
	};
	db.usercollection.insert(newUserDoc, function(err, res){
		if(err){
			return console.log(err)
		}
		callback(res);
	})
};
exports.findUserAccount = function(emailString, callback){
	db.usercollection.find({email: emailString}, function(err,res){
		console.log('User found');
		if(err){
			return console.log(err);
		}
		callback(res[0]);
	});
};
exports.updateUser = function(emailString, callback){
	db.usercollection.findAndModify({
		query: {email: emailString},
		update:{$set:{orderComplete:"true"}},
		new: true
	},
		function(err,doc, lastErrorObject){
		if(err){
			return console.log(err)
		}
		mylog(doc);
		callback(doc);
	})
};
exports.closeDb = function(callback){
    db.close();
    callback();
};