/**
 * Module dependencies.
 */

var express = require('express')
  , Canvas = require('../lib/canvas')
  , Image = Canvas.Image
  , jade = require('jade')
  , app = express.createServer();

// Config

app.register('.jade', jade);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');

// Middleware

app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
app.use(express.errorHandler({ showStack: true }));

// Routes

app.get('/', function(req, res){
  res.render('tests');
});

app.post('/render', function(req, res, next){
  // Normalize state.png as ./public/state.png
  // no good way around this at the moment
  req.body.fn = req.body.fn
    .replace("'state.png'", "'" + __dirname + "/public/state.png'")
    .replace("'face.jpeg'", "'" + __dirname + "/public/face.jpeg'");
  
  // Do not try this at home :)
  var fn = eval('(' + req.body.fn + ')')
    , width = req.body.width
    , height = req.body.height
    , canvas = new Canvas(width, height)
    , ctx = canvas.getContext('2d')
    , start = new Date;

  function done(){
    var duration = new Date - start;
    canvas.toDataURL(function(err, str){
      res.send({ data: str, duration: duration });
    });
  }

  2 == fn.length 
    ? fn(ctx, done)
    : fn(ctx), done();
});

app.listen(parseInt(process.argv[2] || '3000', 10));
console.log('Test server listening on port %d', app.address().port);