# Copyright (c) 2014 Oracle and/or its affiliates. All rights reserved. This
# code is released under a tri EPL/GPL/LGPL license. You can use it,
# redistribute it and/or modify it under the terms of the:
#
# Eclipse Public License version 1.0
# GNU General Public License version 2
# GNU Lesser General Public License version 2.1

module Bench
  module Commands

    class Report < Command

      # TODO (pitr 03-Dec-2015): use data file name instead of report.html

      REPORT_DIR = "#{File.dirname(__FILE__)}/../report"

      def after(options, measurements)
        report = read("report.html")

        replacements = {
          '<script src="jquery.js"></script>' =>
            "<script>#{read('jquery.js')}</script>",

          '<script src="bootstrap.js"></script>' =>
            "<script>#{read('bootstrap.js')}</script>",

          '<script src="chart.js"></script>' =>
            "<script>#{read('chart.js')}</script>",

          '<script src="data.js"></script>' =>
            "<script>bench_data = #{JSONFormatter.format(options, measurements)};</script>",

          '<script src="report.js"></script>' =>
            "<script>#{read('report.js')}</script>",

          '<link rel="stylesheet" type="text/css" href="bootstrap.css">' =>
            "<style>#{read('bootstrap.css')}</style>",

          '<link rel="stylesheet" type="text/css" href="bootstrap-theme.css">' =>
            "<style>#{read('bootstrap-theme.css')}</style>"
        }

        replacements.each do |find, replace|
          report[find] = replace
        end

        if options.flags.has_key? "--baseline"
          report["var speedup_reference_implementation = bench_data.implementations[0];"] =
            "var speedup_reference_implementation = \"#{options.flags['--baseline']}\";"
        end

        report["<!-- notes -->"] = "<p>Report generated at #{Time.now}</p><!-- notes -->"

        if options.flags.has_key? "--notes"
          report["<!-- notes -->"] = File.open(options.flags["--notes"]).read
        end

        File.open("report.html", "w").write(report)

        puts "Total benchmarking time: #{(measurements.total_time/60).round}m"
      end

      def read(file)
        File.open("#{REPORT_DIR}/#{file}", "r").read()
      end

    end

  end
end