<!DOCTYPE html>
<!--
Copyright (c) 2013 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->

<link rel="import" href="/tracing/base/unit.html">
<link rel="import" href="/tracing/model/event_set.html">
<link rel="import" href="/tracing/ui/analysis/analysis_link.html">
<link rel="import" href="/tracing/ui/analysis/analysis_sub_view.html">
<link rel="import" href="/tracing/ui/base/dom_helpers.html">
<link rel="import" href="/tracing/ui/base/table.html">
<link rel="import" href="/tracing/value/ui/scalar_span.html">

<dom-module id='tr-ui-a-multi-object-sub-view'>
  <template>
    <style>
    :host {
      display: flex;
    }
    </style>
    <tr-ui-b-table id="content"></tr-ui-b-table>
  </template>
</dom-module>
<script>
'use strict';

Polymer({
  is: 'tr-ui-a-multi-object-sub-view',
  behaviors: [tr.ui.analysis.AnalysisSubView],

  created: function() {
    this.currentSelection_ = undefined;
  },

  ready: function() {
    this.$.content.showHeader = false;
  },

  get selection() {
    return this.currentSelection_;
  },

  set selection(selection) {
    this.currentSelection_ = selection;

    var objectEvents = tr.b.asArray(selection).sort(
        tr.b.Range.compareByMinTimes);

    var timeSpanConfig = {
      unit: tr.b.Unit.byName.timeStampInMs,
      ownerDocument: this.ownerDocument
    };
    var table = this.$.content;
    table.tableColumns = [
      {
        title: 'First',
        value: function(event) {
          if (event instanceof tr.model.ObjectSnapshot)
            return tr.v.ui.createScalarSpan(event.ts, timeSpanConfig);

          var spanEl = document.createElement('span');
          Polymer.dom(spanEl).appendChild(tr.v.ui.createScalarSpan(
              event.creationTs, timeSpanConfig));
          Polymer.dom(spanEl).appendChild(tr.ui.b.createSpan({
              textContent: '-',
              marginLeft: '4px',
              marginRight: '4px'
          }));
          if (event.deletionTs != Number.MAX_VALUE) {
            Polymer.dom(spanEl).appendChild(tr.v.ui.createScalarSpan(
                event.deletionTs, timeSpanConfig));
          }
          return spanEl;
        },
        width: '200px'
      },
      {
        title: 'Second',
        value: function(event) {
          var linkEl = document.createElement('tr-ui-a-analysis-link');
          linkEl.setSelectionAndContent(function() {
              return new tr.model.EventSet(event);
          }, event.userFriendlyName);
          return linkEl;
        },
        width: '100%'
      }
    ];
    table.tableRows = objectEvents;
    table.rebuild();
  }
});

tr.ui.analysis.AnalysisSubView.register(
    'tr-ui-a-multi-object-sub-view',
    tr.model.ObjectInstance,
    {
      multi: true,
      title: 'Object Instances',
    });
tr.ui.analysis.AnalysisSubView.register(
    'tr-ui-a-multi-object-sub-view',
    tr.model.ObjectSnapshot,
    {
      multi: true,
      title: 'Object Snapshots',
    });
</script>
