/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */

'use strict';

var WorkerHandler = {
  setup: function(handler) {
    var pdfDoc = null;
    
    handler.on("doc", function(data) {
      pdfDoc = new PDFDoc(new Stream(data));
      console.log("setup pdfDoc");
    });
  
    handler.on("page_request", function(pageNum) {
      pageNum = parseInt(pageNum);
      console.log("about to process page", pageNum);

      var page = pdfDoc.getPage(pageNum);

      // The following code does quite the same as Page.prototype.startRendering,
      // but stops at one point and sends the result back to the main thread.
      var gfx = new CanvasGraphics(null);
      var fonts = [];
      var images = [];

      // Pre compile the pdf page and fetch the fonts/images.
      var IRQueue = page.getIRQueue(fonts, images);

      // Extract the minimum of font data that is required to build all required
      // font stuff on the main thread.
      var fontsMin = [];
      for (var i = 0; i < fonts.length; i++) {
        var font = fonts[i];

        fontsMin.push({
          name:       font.name,
          file:       font.file,
          properties: font.properties
        });
      }

      // TODO: Handle images here.

      console.log("about to send page", pageNum);

      if (true /* show used commands */) {
        var cmdMap = {};
  
        var fnArray = IRQueue .fnArray;
        for (var i = 0; i < fnArray.length; i++) {
          var entry = fnArray[i];
          if (entry == "paintReadyFormXObject") {
            //console.log(preCompilation.argsArray[i]);
          }
          if (cmdMap[entry] == null) {
            cmdMap[entry] = 1;
          } else {
            cmdMap[entry] += 1;
          }
        }

        // // Make a copy of the fnArray and show all cmds it has.
        // var fnArray = preCompilation.fnArray.slice(0).sort();
        // for (var i = 0; i < fnArray.length; true) {
        //   if (fnArray[i] == fnArray[i + 1]) {
        //     fnArray.splice(i, 1);
        //   } else {
        //     i++;
        //   }
        // }
        console.log("cmds", JSON.stringify(cmdMap));
      } 

      handler.send("page", {
        pageNum:  pageNum,
        fonts:    fontsMin,
        images:   images,
        IRQueue:  IRQueue,
      });
    }, this);
  }
}