var Client = function (config) {
  var client = this;
  var net = require('net');
  var sys = require('sys');
  var log = function (x) {
    sys.puts('TCP server: ' + x);
  };

  client.connect = function (callback) {
    var stream = net.createConnection(config.port, config.server);
    stream.on('connect', function () {
      stream.write(
        'NICK ' + config.nick + '\n' +
        'USER ' + config.nick + ' 0 *:Karl Koch\n' +
        'JOIN ' + config.channel + '\n'
      );
      //client.write = function (text) {
      //  stream.write('PRIVMSG ' + config.channel + ' :' + text);
      //};
      client.write = msg_start_send;
      callback();
    });
    //stream.on('secure', function () {
    //});

    var msg = [];

    var msg_start_send = function (x) {
      client.write = msg_append;
      setTimeout(function () {
        var x = msg.join('\n') + '\n';
        msg = [];
        client.write = msg_start_send;
        stream.write('PRIVMSG ' + config.channel + ' :' + x);
      }, 1000);
    };

    var msg_append = function (x) {
      msg[msg.length] = x;
    };


    stream.on('data', function (data) {
      data = String(data);
      log('' + data + '');
      if (data.substring(0,4) === 'PING') {
        log('PONG!');
        stream.write('PONG ' + data.substring(4));
      }
    });
    //stream.on('end', function () {
    //});
    //stream.on('timeout', function () {
    //});
    //stream.on('drain', function () {
    //});
    //stream.on('error', function (exception) {
    //});
    //stream.on('clonse', function (exception) {
    //});
  };
};

exports.createClient = function (config) {
  return new Client(config);
};