var logBuffer = [];
var loggingUrl = 'http://localhost:3001';
var intervalTime = 5000; //send every 5 seconds
var testing = false;
var echo = true;
var msg = 'DRAPER LOG: ';

function timerMethod() {

	if (logBuffer.length) {
    if (echo) {
      console.log(msg + 'sent ' + logBuffer.length + ' logs to - ' + loggingUrl)
    }
		if (!testing) {
			XHR(loggingUrl + '/send_log', logBuffer, function(d) {
				logBuffer = [];
			})			
		} else {
      logBuffer = [];
    }		
	}	else {
		if (echo) {
			console.log(msg + 'no log sent, buffer empty.')
		}		
	}
}

var timerId = setInterval(timerMethod, intervalTime);

self.addEventListener('message', function(e) {
  var data = e.data;
  switch (data.cmd) {
    case 'setLoggingUrl':
			loggingUrl = data.msg;
      break;
    case 'sendMsg':
      logBuffer.push(data.msg)
      break;
    case 'setTesting':
    	if (data.msg) {
    		var msg = 'DRAPER LOG: (TESTING) ';
    	} else {
    		var msg = 'DRAPER LOG: ';
    	}
      testing = data.msg;
      break;
    case 'setEcho':
      echo = data.msg;
      break;
    case 'sendBuffer':
    	sendBuffer();
    	break;
  };
}, false);


function sendBuffer() {
  // method to force send the buffer
	timerMethod();
	if (echo) {
		console.log(msg + ' buffer sent')
	}	
}
//simple XHR request in pure raw JavaScript
function XHR(url, log, callback) {
	var xhr;

	if(typeof XMLHttpRequest !== 'undefined') xhr = new XMLHttpRequest();
	else {
		var versions = ["MSXML2.XmlHttp.5.0", 
		 				"MSXML2.XmlHttp.4.0",
		 			  "MSXML2.XmlHttp.3.0", 
		 			  "MSXML2.XmlHttp.2.0",
		 				"Microsoft.XmlHttp"]

		 for(var i = 0, len = versions.length; i < len; i++) {
		 	try {
		 		xhr = new ActiveXObject(versions[i]);
		 		break;
		 	}
		 	catch(e){}
		 } // end for
	}
	
	xhr.onreadystatechange = ensureReadiness;
	
	function ensureReadiness() {
		if(xhr.readyState < 4) {
			return;
		}
		
		if(xhr.status !== 200) {
			return;
		}

		// all is well	
		if(xhr.readyState === 4) {
			callback(xhr);
		}			
	}
	
	xhr.open("POST", url, true);
	xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
	xhr.send(JSON.stringify(log));
}
