<!--
  The <metrics-analysis-sk> custom element declaration. Displays a form that allows the user to
  queue a task to do metrics analysis on trace URLs.

  Attributes:
    None.

  Events:
    None.

  Methods:
    None.
-->

<dom-module id="metrics-analysis-sk">
  <style>
    paper-input {
      width: 20em;
    }

    .triggering-spinner {
      margin: auto;
      vertical-align: middle;
    }

    .iron-selected {
      background-color: #D6ECF2;
    }

    .long-field {
      width: 40em;
    }

    .hidden {
      display: none;
    }

    .smaller-font {
      font-size: 80%;
    }

    iron-selector.long-field > div {
      width: 40em;
    }

    iron-selector.medium-field > div {
      width: 20em;
    }

    table.options td {
      padding: 1em 2em;
    }

    td.center {
      text-align:center;
      padding-top:2em;
    }

    .panel {
      @apply(--shadow-elevation-2dp);
    }
  </style>
  <template>

    <confirm-dialog-sk id="confirm_dialog"></confirm-dialog-sk>

    <table class="options panel">

      <tr>
        <td>Metric Name</td>
        <td>
          <paper-input value="" id="metric_name" class="medium-field"></paper-input>
          <span class="smaller-font">The metric to parse the provided traces with. Eg: loadingMetric</span>
        </td>
      </tr>

      <tr>
        <td>Source of traces</td>
        <td>
          <paper-input value="" id="analysis_task_id" class="medium-field" label="Analysis Task Id"></paper-input>
          <expanding-textarea-sk id="custom_traces" display-text="Specify custom list of traces" placeholder-text="Eg: trace1,trace2,trace3"></expanding-textarea-sk>
        </td>
      </tr>

      <tr>
        <td>Benchmark Arguments</td>
        <td>
          <paper-input value="--output-format=csv" id="benchmark_args" class="long-field"></paper-input>
          <span class="smaller-font">These will be the arguments to the analysis_metrics_ct benchmark.</span><br/>
          <span class="smaller-font"><b>Note:</b> Use --run-benchmark-timeout=[secs] to specify the timeout of the run_benchmark script. 300 is the default.</span><br/>
          <span class="smaller-font"><b>Note:</b> Use --max-pages-per-bot=[num] to specify the number of pages to run per bot. 50 is the default.</span>
        </td>
      </tr>

      <tr>
        <td>Field Value Column Name</td>
        <td>
          <paper-input value="avg" id="value_column_name" class="medium-field"></paper-input>
          <span class="smaller-font">Which column's entries to use as field values.</span>
        </td>
      </tr>

      <tr>
        <td>
          Chromium Git patch (optional)<br/>
          Applied to Chromium ToT
        </td>
        <td>
          <patch-sk id="chromium_patch"
                    patch-type="chromium"
                    cl-description="{{chromiumClDescription}}">
          </patch-sk>
        </td>
      </tr>

      <tr>
        <td>
          Catapult Git patch (optional)<br/>
          Applied to Catapult Rev in <a href="https://chromium.googlesource.com/chromium/src/+show/HEAD/DEPS">DEPS</a>
        </td>
        <td>
          <patch-sk id="catapult_patch"
                    patch-type="catapult"
                    cl-description="{{catapultClDescription}}">
          </patch-sk>
        </td>
      </tr>

      <tr>
        <td>Repeat this task</td>
        <td>
          <repeat-after-days-sk id="repeat_after_days"></repeat-after-days-sk>
        </td>
      </tr>

      <tr>
        <td>Task Priority</td>
        <td>
          <iron-selector attr-for-selected="id" id="task_priority" selected="100" class="medium-field">
            <template is="dom-repeat" items="{{taskPriorities}}">
              <div id="{{item}}">{{getTaskPriorityDesc(item, taskPrioritiesToDesc)}}</div>
            </template>
          </iron-selector>
        </td>
      </tr>

      <tr>
        <td>
          Notifications CC list (optional)<br/>
          Email will be sent by ct@skia.org
        </td>
        <td>
          <paper-input value="" id="cc_list" label="email1,email2,email3" class="long-field"></paper-input>
        </td>
      </tr>

      <tr>
        <td>Description</td>
        <td>
          <paper-input value="" id="desc" label="Description is required" class="long-field"></paper-input>
        </td>
      </tr>

      <tr>
        <td colspan="2" class="center">
          <div class="triggering-spinner">
            <paper-spinner active="[[ triggeringTask ]]" alt="Trigger task"></paper-spinner>
          </div>
          <paper-button raised id="submit_task" disabled="[[ triggeringTask ]]">Queue Task</paper-button>
        </td>
      </tr>
      <tr>
        <td colspan="2" class="center">
          <paper-button raised id="view_history">View runs history</paper-button>
        </td>
      </tr>
    </table>

    <br/><br/>

  </template>
</dom-module>

<script>
   Polymer({
     is: "metrics-analysis-sk",
     properties: {
       chromiumClDescription: String,
       catapultClDescription: String,
       taskPriorities: {
         type: Array,
         value: [],
       },
       taskPrioritiesToDesc: {
         type: Object,
         value: {},
       },
       triggeringTask: {
         type: Boolean,
         value: false,
       },
     },

     observers: [
       "clDescriptionChanged(chromiumClDescription, catapultClDescription)"
     ],

     ready: function() {
       var that = this;
       this.$.submit_task.addEventListener('click', function(e) {
         that.validateTask();
       });
       this.$.view_history.addEventListener('click', function(e) {
         that.gotoRunsHistory();
       });
       this.$.custom_traces.addEventListener('click', function(e) {
         // Do not display the analysis task id field if custom traces is open.
         that.$.analysis_task_id.hidden = that.$.custom_traces.opened;
         if (that.$.custom_traces.opened) {
           // Clear out analysis task id if custom traces is open.
           that.$.analysis_task_id.value = '';
         } else {
           // Clear out traces if it is no longer open.
           that.$.custom_traces.value = '';
         }
       });
     },

     getTaskPriorityDesc: function(taskPriority, taskPrioritiesToDesc) {
       if (taskPrioritiesToDesc) {
         return taskPrioritiesToDesc[taskPriority];
       }
     },

     clDescriptionChanged: function(chromiumClDesc, catapultClDesc) {
       this.$.desc.value = ctfe.getDescriptionOfCls(chromiumClDesc, '', '', catapultClDesc, '');
     },

     validateTask: function() {
       if (!this.$.metric_name.value) {
         sk.errorMessage("Please specify a metric name");
         this.$.metric_name.focus();
         return;
       }
       if (!this.$.analysis_task_id.value && !this.$.custom_traces.value) {
         sk.errorMessage("Please specify an analysis task id or custom traces");
         this.$.analysis_task_id.focus();
         return;
       };
       if (!this.$.chromium_patch.validate() ||
           !this.$.catapult_patch.validate()) {
         return;
       }
       if (!this.$.desc.value) {
         sk.errorMessage("Please specify a description");
         this.$.desc.focus();
         return;
       }
       if (ctfe.moreThanThreeActiveTasks($$$("drawer-sk").sizeOfUserQueue)) {
         return;
       }
       this.$.confirm_dialog.open("Proceed with queueing task?")
         .then(this.queueTask.bind(this))
         .catch(function(err) {
           console.log(err);
           sk.errorMessage("Did not queue");
         })
     },

     queueTask: function() {
       this.triggeringTask = true;
       var params = {};
       params["metric_name"] = this.$.metric_name.value;
       params["analysis_task_id"] = this.$.analysis_task_id.value;
       params["custom_traces"] = this.$.custom_traces.value;
       params["benchmark_args"] = this.$.benchmark_args.value;
       params["value_column_name"] = this.$.value_column_name.value;
       params["desc"] = this.$.desc.value;
       params["chromium_patch"] = this.$.chromium_patch.patch;
       params["catapult_patch"] = this.$.catapult_patch.patch;
       params["repeat_after_days"] = this.$.repeat_after_days.selected;
       params["task_priority"] = this.$.task_priority.selected;
       if (this.$.cc_list.value) {
         params["cc_list"] = this.$.cc_list.value.split(",")
       }

       var that = this;
       sk.post("/_/add_metrics_analysis_task", JSON.stringify(params)).then(function(resp) {
         that.gotoRunsHistory();
       }).catch(function(e) {
         that.triggeringTask = false;
         sk.errorMessage(e);
       });
     },

     gotoRunsHistory: function() {
       window.location.href = "/metrics_analysis_runs/";
     },
   });
</script>
