require('app-module-path').addPath('./lib');

var http = require('http');
var express = require('express');
var pug = require('pug');
var bp = require('body-parser');
var socket = require('socket.js');
var log = require('log.js');
var app = express();

// Socket.io initialization
var http = require('http').Server(app);
var io = require('socket.io')(http);
require('./lib/socket.js')(io);

var isDev = app.get('env') === 'development';

app.set('view engine', 'pug');
app.set('trust proxy', 1);

// parse application/x-www-form-urlencoded
app.use(bp.urlencoded({ extended: false }))

// parse application/json
app.use(bp.json())

// Log request and time to answer
app.use(function(req, res, next) {
    let start = Date.now();
    res.on('finish', function() {
        log.request(req, res, Date.now() - start);
    });
    res.locals.title = "slideshow.io";
    next();
});

// Load controllers
require('./lib/get')(app);

// Static files
app.use('/static', express.static('static'));

// When error raised
app.use(function(err, req, res, next) {
    if (err.status === 404) {
        res.setHeader('Content-Type', 'text/html');
        res.send('Error 404');
    }
});

// When route not found, raise not found
app.use(function(req, res) {
    res.setHeader('Content-Type', 'text/html');
    res.send('Error 404');
});

// Set ports and ip address
var serverPort, serverIpAddress;

if ( isDev ) {
    serverPort = 4001;
    serverIpAddress = 'localhost';
} else {
    // Openhift conf
    serverPort = process.env.OPENSHIFT_NODEJS_PORT || 8080;
    serverIpAddress = process.env.OPENSHIFT_NODEJS_IP || '127.0.0.1';
}

// Start server
http.listen(serverPort, serverIpAddress, function() {
    log.debug("Now listening " + serverIpAddress + ":" + serverPort);
});
