/*
 * tar-js
 * MIT (c) 2011 T. Jameson Little
 */
	
/*
struct posix_header {             // byte offset
	char name[100];               //   0
	char mode[8];                 // 100
	char uid[8];                  // 108
	char gid[8];                  // 116
	char size[12];                // 124
	char mtime[12];               // 136
	char chksum[8];               // 148
	char typeflag;                // 156
	char linkname[100];           // 157
	char magic[6];                // 257
	char version[2];              // 263
	char uname[32];               // 265
	char gname[32];               // 297
	char devmajor[8];             // 329
	char devminor[8];             // 337
	char prefix[155];             // 345
                                  // 500
};
*/

var utils = require("./utils"),
  headerFormat;

headerFormat = [
  {
    'field': 'fileName',
    'length': 100
  },
  {
    'field': 'fileMode',
    'length': 8
  },
  {
    'field': 'uid',
    'length': 8
  },
  {
    'field': 'gid',
    'length': 8
  },
  {
    'field': 'fileSize',
    'length': 12
  },
  {
    'field': 'mtime',
    'length': 12
  },
  {
    'field': 'checksum',
    'length': 8
  },
  {
    'field': 'type',
    'length': 1
  },
  {
    'field': 'linkName',
    'length': 100
  },
  {
    'field': 'ustar',
    'length': 8
  },
  {
    'field': 'owner',
    'length': 32
  },
  {
    'field': 'group',
    'length': 32
  },
  {
    'field': 'majorNumber',
    'length': 8
  },
  {
    'field': 'minorNumber',
    'length': 8
  },
  {
    'field': 'filenamePrefix',
    'length': 155
  },
  {
    'field': 'padding',
    'length': 12
  }
];

function formatHeader(data, cb) {
  var buffer = utils.clean(512),
    offset = 0;

  headerFormat.forEach(function (value) {
    var str = data[value.field] || "",
      i, length;

    for (i = 0, length = str.length; i < length; i += 1) {
      buffer[offset] = str.charCodeAt(i);
      offset += 1;
    }

    offset += value.length - i; // space it out with nulls
  });

  if (typeof cb === 'function') {
    return cb(buffer, offset);
  }
  return buffer;
}

module.exports.structure = headerFormat;
module.exports.format = formatHeader;
