var Packet = require('../packets/packet');

function ColumnDefinition(packet)
{
  this.catalog  = packet.readLengthCodedString();
  this.schema   = packet.readLengthCodedString();
  this.table    = packet.readLengthCodedString();
  this.orgTable = packet.readLengthCodedString();
  this.name     = packet.readLengthCodedString();
  this.orgName  = packet.readLengthCodedString();
  packet.skip(1); //  length of the following fields (always 0x0c)
  this.characterSet = packet.readInt16();
  this.columnLength = packet.readInt32();
  this.columnType   = packet.readInt8();
  this.flags        = packet.readInt16();
  this.decimals     = packet.readInt8();
}

ColumnDefinition.toPacket = function(column, sequenceId)
{
  var length = 0;
  var fields = 'catalog schema table orgTable name orgName'.split(' ');
  function addFieldLength(name) {
    var str = column[name];
    length +=Packet.lengthCodedNumberLength(str);
    length += str.length;
  }
  fields.forEach(addFieldLength);
  length += 13;
  var buffer = new Buffer(length);
  function writeField(name) {
    packet.writeLengthCodedString(column[name]);
  }
  var packet = new Packet(sequenceId, buffer);
  packet.offset = 4;
  fields.forEach(writeField);
  packet.writeInt8 (0x0c);
  packet.writeInt16(column.characterSet);
  packet.writeInt32(column.columnLength);
  packet.writeInt8 (column.columnType);
  packet.writeInt16(column.flags);
  packet.writeInt8 (column.decimals);
  return packet;
};

module.exports = ColumnDefinition;