#! /usr/bin/env node

name = '//hyper/influx/http'
port = process.env.port || 1337
host = process.env.host || '127.0.0.1'


console.info(name);

fs = require('fs');
path = require('path');
http = require('http');

fifo_path = path.resolve(process.argv[2] || path.join(process.cwd(), '0'));

// check configuration
try {
  (function (stat) {
    if ((stat.mode & 0010000) === 0) {
      throw { code: 'E_not_fifo', path: fifo_path };
    };
  })(fs.statSync(fifo_path));
} catch (exn) {
  console.error(exn);
  process.exit(23);
};

process.stdin.destroy();
fifo = fs.createWriteStream(fifo_path);
fifo.on('open', function (fd) {
  console.info('fifo open as fd', fd);

  http.createServer(function (req, res) {
    var rhost = req.connection.remoteAddress;
    var rport = req.connection.remotePort;
    var id = rhost + ':' + rport;
  
    console.info(id, 'request', req.method, req.url);

    req.on('data', function (data) {
      console.info(id, 'data', data.length);
    });

    req.on('end', function (data) {
      console.info(id, 'end');
      res.writeHead(202, {
        'Content-Length': 0,
        'Connection': 'close'
      });
      res.end();
    });

    req.pipe(fifo, { end: false });
  }).listen(port, host, function () {
    console.info('server running at http://' + host + ':' + port + '/');
  });
});