/*! sheetjs (C) 2013-present SheetJS -- http://sheetjs.com */
import { decompress_iwa_file, compress_iwa_file, u8concat } from "./src/numbers";
import { read, writeFile, utils, find, CFB$Entry } from 'cfb';

var f = process.argv[2]; var o = process.argv[3];
var cfb = read(f, {type: "file"});

var FI = cfb.FileIndex;
var bufs = [], mode = 0;
FI.map((fi, idx): [CFB$Entry, string] => ([fi, cfb.FullPaths[idx]])).forEach(row => {
  var fi = row[0], fp = row[1];
  /* blank all plist files */
  if(fi.name.match(/\.plist/)) {
    console.error(`Blanking plist ${fi.name}`);
    fi.content = new Uint8Array([
      0x62, 0x70, 0x6c, 0x69, 0x73, 0x74, 0x30, 0x30, 0xd0, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x0a
    ]);
    return;
  }

  if(fi.type != 2) return;

  /* Remove other metadata */
  if(!fi.name.match(/\.iwa/)) {
    if(fi.name.match(/Sh33tJ5/)) return;
    console.error(`Removing file ${fi.name}`);
    utils.cfb_del(cfb, fp);
    return;
  }

  /* Reframe .iwa files */
  console.error(`Reframing iwa ${fi.name} (${fi.size})`);
  var old_content = fi.content;
  var raw1 = decompress_iwa_file(old_content as Uint8Array);
  var new_content = compress_iwa_file(raw1);
  var raw2 = decompress_iwa_file(new_content);
  for(var i = 0; i < raw1.length; ++i) if(raw1[i] != raw2[i]) throw new Error(`${fi.name} did not properly roundtrip`);
  bufs.push(raw1);
  switch(mode) {
    case 1: utils.cfb_del(cfb, fp); break;
    /* falls through */
    case 0: fi.content = new_content; break;
  }
});

if(mode == 1) {
  var res = compress_iwa_file(u8concat(bufs));
  console.error(`Adding iwa Document.iwa (${res.length})`);
  utils.cfb_add(cfb, "/Index/Document.iwa", res);
}
writeFile(cfb, o, {fileType: "zip"});