require('./datasets/google_message1/proto2/benchmark_message1_proto2_pb.js');
require('./datasets/google_message1/proto3/benchmark_message1_proto3_pb.js');
require('./datasets/google_message2/benchmark_message2_pb.js');
require('./datasets/google_message3/benchmark_message3_pb.js');
require('./datasets/google_message4/benchmark_message4_pb.js');
require('./benchmarks_pb.js');

var fs = require('fs');
var benchmarkSuite = require("./benchmark_suite.js");


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

var results = [];
var json_file = "";

console.log("#####################################################");
console.log("Js Benchmark: ");
process.argv.forEach(function(filename, index) {
  if (index < 2) {
    return;
  }
  if (filename.indexOf("--json_output") != -1) {
    json_file = filename.replace(/^--json_output=/, '');
    return;
  }

  var benchmarkDataset =
      proto.benchmarks.BenchmarkDataset.deserializeBinary(fs.readFileSync(filename));
  var messageList = [];
  var totalBytes = 0;
  benchmarkDataset.getPayloadList().forEach(function(onePayload) {
    var message = getNewPrototype(benchmarkDataset.getMessageName());
    messageList.push(message.deserializeBinary(onePayload));
    totalBytes += onePayload.length;
  });

  var scenarios = benchmarkSuite.newBenchmark(
      benchmarkDataset.getMessageName(), filename, "js");
  scenarios.suite
  .add("js deserialize", function() {
    benchmarkDataset.getPayloadList().forEach(function(onePayload) {
      var protoType = getNewPrototype(benchmarkDataset.getMessageName());
      protoType.deserializeBinary(onePayload);
    });
  })
  .add("js serialize", function() {
    var protoType = getNewPrototype(benchmarkDataset.getMessageName());
    messageList.forEach(function(message) {
      message.serializeBinary();
    });
  })
  .run({"Async": false});

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

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

if (json_file != "") {
  fs.writeFile(json_file, JSON.stringify(results), (err) => {
    if (err) throw err;
  });
}

