var http = require('http');
var koa = require('..');
var app = koa();

// x-response-time

app.use(function(next){
  return function *(){
    var start = new Date;
    yield next;
    var ms = new Date - start;
    this.set('X-Response-Time', ms + 'ms');
  }
});

// logger

app.use(function(next){
  return function *(){
    var start = new Date;
    yield next;
    var ms = new Date - start;
    console.log('%s %s - %s', this.method, this.url, ms);
  }
});

// content-length

app.use(function(next){
  return function *(){
    yield next;
    this.set('Content-Length', Buffer.byteLength(this.body));
  }
});

// response

app.use(function(next){
  return function *(){
    yield next;
    if ('/' != this.url) return;
    this.status = 200;
    this.body = 'Hello World';
  }
});

// custom 404 handler

app.use(function(next){
  return function *(){
    yield next;
    this.status = 404;
    this.body = 'Sorry cannot find that!';
    console.log(this);
  }
});

http.createServer(app.callback()).listen(3000);