<!--
  The fuzzer/res/fuzzer.js file must be included before this file.

  This in an HTML Import-able file that contains the definition
  of the following elements:

    <fuzzer-collapse-function-sk>

  To use this file import it:

    <link href="/res/imp/fuzzer-collapse-function-sk.html" rel="import" />

  Usage:

    <fuzzer-collapse-function-sk></fuzzer-collapse-function-sk>

  Properties:
    func - The FunctionDetails object.  Expected to have the following attributes:
      functionName: String,
      count: Number,
      byLineNumber: Array of Detail objects.  See fuzzer-collapse-details-sk.html for schema.

    detailsBase: String, the base url for details (should include file name)
    expand: String, which should be "true" if the gui should start expanded

  Methods:
    setFunc(func) - Programmatically set the FunctionDetails object.

  Events:
    None.
-->
<link rel="import" href="/res/common/imp/details-summary.html">
<link rel="import" href="/res/imp/bower_components/iron-collapse/iron-collapse.html">
<link rel="import" href="/res/imp/bower_components/iron-icons/iron-icons.html">
<link rel="import" href="fuzzer-collapse-details-sk.html">
<dom-module id="fuzzer-collapse-function-sk">
  <template>
    <style>
    .func {
      padding: 20px;
      border-radius: 10px;
      background-color: #E5E5E5;
      color: #000000;
      display:block;
    }

    ul {
      list-style-type: none;
    }
    </style>
    <details-sk id="func" class="func" open="[[expand]]">
      <summary-sk>
        <span>
          <a href$="{{_getDetailsLink(detailsBase, func)}}">Function {{func.functionName}}</a>
          -- {{func.count}} crash-causing fuzzes
        </span>
      </summary-sk>
      <ul>
        <template is="dom-repeat" items="{{func.byLineNumber}}" as="lineNumber" sort="_byCount">
          <fuzzer-collapse-details-sk class="line-group"
              details="[[lineNumber]]"
              details-base="[[_getDetailsLink(detailsBase, func)]]"
              expand="[[_expandFirst(index)]]">
          </fuzzer-collapse-details-sk>
        </template>
      </ul>
    </div>
  </template>
  <script>
  Polymer({
    is: 'fuzzer-collapse-function-sk',

    properties: {
      func: {
        type: Object,
        value: function() {
          return {};
        },
      },
      detailsBase: {
        type: String,
        value: ""
      },
      expand: {
        type: Boolean,
        value: false
      },
    },

    setFunc: function(func){
      this.func = func;
      this._recount();
    },

    _expandFirst: function(index) {
      return index === 0;
    },

    _byCount: function(a, b) {
      // Higher counts come first
      return b.count - a.count;
    },

    _getDetailsLink: function(detailsBase, func) {
      if (!file) {
        return "#";
      }
      return fuzzer.getLinkToDetails(detailsBase, "func", func.functionName);
    },

  });
  </script>
</dom-module>
