var express = require('express'); // Get the module
var app = express(); // Create express by calling the prototype in var express
var http = require('http').Server(app);
var io = require('socket.io')(http);
var port = (process.env.PORT || 5000);

var bpm = 120;
var stepPos = 0;

var metronome = null;
metronome = setInterval(function(){ 
                io.sockets.emit('metronome', getStepPos());
              }, (60000 / bpm)/4);


http.listen(port, function() {
    console.log('Listening on port: '+port);
});

app.use(express.static(__dirname + '/public'));

app.get('/', function(req, res){
	res.sendFile(__dirname + '/index.html');
});

io.on('connection', function(socket){

    io.sockets.emit('updateUserCount', Object.keys(io.engine.clients).length);
    socket.on('disconnect', function(){
      io.sockets.emit('updateUserCount', Object.keys(io.engine.clients).length);
    });
  	console.log('a user connected');
  	socket.on('bpm', function(newBpm){
      bpm = newBpm;
      clearInterval(metronome);
      metronome = generateMetronome(bpm, metronome);
      io.sockets.emit('setBpmSlider', bpm);
	  });
    io.sockets.emit('setBpmSlider', bpm);

    socket.on('playSound', function(data){
      socket.broadcast.emit('playExternalSound', data);
    });
});





/*
setInterval(function(){
  	io.sockets.emit('rand', Math.floor(Math.random() * 3));
 	setTimeout(function(){
 	 	io.sockets.emit('rand', 1);
  	},  speed/2);
  	
  }, speed);
*/

function generateMetronome(newBpm, oldMetronome){
  clearInterval(oldMetronome);
  oldMetronome = null;
  
  return setInterval(function(){ 
                io.sockets.emit('metronome', getStepPos());
              }, (60000 / newBpm)/4);


}

function getStepPos(){
    if(stepPos >= 16){
        stepPos = 0;
    }
    return stepPos++;
}