class Spoom::Coverage::D3::Timeline::Runtimes

def initialize(id, snapshots)

def initialize(id, snapshots)
  data = snapshots.map do |snapshot|
    {
      timestamp: snapshot.commit_timestamp,
      commit: snapshot.commit_sha,
      runtime: snapshot.duration.to_f / 1000.0 / 1000.0,
    }
  end
  super(id, data, [])
end

def plot

def plot
  <<~JS
    #{x_scale}
    #{y_scale(
      min: "0",
      max: "d3.max(data_#{id}, (d) => d.runtime)",
      ticks: "ticks(10)",
    )}
    #{area(y: "d.runtime")}
    #{line(y: "d.runtime")}
    #{points(y: "d.runtime")}
    #{x_ticks}
    #{y_ticks(ticks: "ticks(5)", format: 'd.toFixed(2) + "s"', padding: 40)}
      .call(g => g.selectAll(".tick:first-of-type text").remove())
  JS
end

def tooltip

def tooltip
  <<~JS
    function tooltip_#{id}(d) {
      moveTooltip(d)
        .html("commit <b>" + d.commit + "</b><br>"
          + d3.timeFormat("%y/%m/%d")(parseDate(d.timestamp)) + "<br><br>"
          + "<b>" + d.runtime + "</b>s<br><br>"
          + "(sorbet user + system time)")
    }
  JS
end