var root = require("./generated_bundle_code.js");
var fs = require('fs');
var benchmark = require("./node_modules/benchmark");
var benchmarkSuite = require("./benchmark_suite.js");


function getNewPrototype(name) {
  var message = eval("root." + name);
  if (typeof(message) == "undefined") {
    throw "type " + name + " is undefined";
  }
  return message;
}


var results = [];

console.log("#####################################################");
console.log("ProtobufJs Benchmark: ");
process.argv.forEach(function(filename, index) {
  if (index < 2) {
    return;
  }
  var benchmarkDataset =
      root.benchmarks.BenchmarkDataset.decode(fs.readFileSync(filename));
  var messageList = [];
  var totalBytes = 0;
  benchmarkDataset.payload.forEach(function(onePayload) {
    var message = getNewPrototype(benchmarkDataset.messageName);
    messageList.push(message.decode(onePayload));
    totalBytes += onePayload.length;
  });

  var scenarios = benchmarkSuite.newBenchmark(
    benchmarkDataset.messageName, filename, "protobufjs");
  scenarios.suite
  .add("protobuf.js static decoding", function() {
    benchmarkDataset.payload.forEach(function(onePayload) {
      var protoType = getNewPrototype(benchmarkDataset.messageName);
      protoType.decode(onePayload);
    });
  })
  .add("protobuf.js static encoding", function() {
    var protoType = getNewPrototype(benchmarkDataset.messageName);
    messageList.forEach(function(message) {
      protoType.encode(message).finish();
    });
  })
  .run({"Async": false});

  results.push({
    filename: filename,
    benchmarks: {
      protobufjs_decoding: scenarios.benches[0] * totalBytes,
      protobufjs_encoding: scenarios.benches[1] * totalBytes
    }
  })

  console.log("Throughput for decoding: "
    + scenarios.benches[0] * totalBytes / 1024 / 1024 + "MB/s" );
  console.log("Throughput for encoding: "
    + scenarios.benches[1] * totalBytes / 1024 / 1024 + "MB/s" );
  console.log("");
});
console.log("#####################################################");

