text: /*jslint node: true */
  /*jshint unused: false */
  'use strict';
  
  /**
   * Module dependencies.
   */
  
  if (process.env.NEW_RELIC_LICENSE_KEY) {
    console.log('New Relic in use.');
    require('newrelic');
  } else {
    console.log('New Relic not in use.');
  }
  
  var SwaggerExpress = require('swagger-express-mw');
  var SwaggerUi = require('swagger-tools/middleware/swagger-ui');
  var express = require('express');
  var path = require('path');
  var favicon = require('serve-favicon');
  var logger = require('morgan');
  var cookieParser = require('cookie-parser');
  var bodyParser = require('body-parser');
  var routes = require('./routes/index');
  var app = require('express')();
  
  // view engine setup
  app.set('views', path.join(__dirname, 'views'));
  app.set('view engine', 'hbs');
  
  // uncomment after placing your favicon in /public
  //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
  app.use(logger('dev'));
  app.use(bodyParser.json());
  app.use(bodyParser.urlencoded({ extended: false }));
  app.use(cookieParser());
  app.use(express.static(path.join(__dirname, 'public')));
  
  app.use('/', routes);
  
  module.exports = app; // for testing
  
  var config = {
    appRoot: __dirname, // required config
  };
  
  // error handlers
  
  // development error handler
  // will print stacktrace
  if (app.get('env') === 'development') {
    app.use(function(err, req, res, next) {
      res.status(err.status || 500);
      res.render('error', {
        message: err.message,
        error: err,
      });
    });
  }
  
  // production error handler
  // no stacktraces leaked to user
  app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
      message: err.message,
      error: {},
    });
  });
  
  SwaggerExpress.create(config, function(err, swaggerExpress) {
    if (err) {
      throw err;
    }
  
    // add swagger-ui
    app.use(new SwaggerUi(swaggerExpress.runner.swagger));
  
    // install middleware
    swaggerExpress.register(app);
  
    var port = process.env.PORT || 3000;
    app.listen(port);
  });
  