<!--
    Copyright 2022 The Go Authors. All rights reserved.
    Use of this source code is governed by a BSD-style
    license that can be found in the LICENSE file.
-->
{{define "task_list"}}
  {{$workflow := .Workflow}}
  <table class="TaskList">
    <thead>
      <tr class="TaskList-item TaskList-itemHeader">
        <th class="TaskList-itemHeaderCol TaskList-itemExpand"></th>
        <th class="TaskList-itemHeaderCol TaskList-itemState">State</th>
        <th class="TaskList-itemHeaderCol TaskList-itemName">Name</th>
        <th class="TaskList-itemHeaderCol TaskList-itemStarted">Started</th>
        <th class="TaskList-itemHeaderCol TaskList-itemUpdated">Updated</th>
        <th class="TaskList-itemHeaderCol TaskList-itemResult">Result</th>
        <th class="TaskList-itemHeaderCol TaskList-itemActions">Actions</th>
      </tr>
    </thead>
    {{range $task := .Tasks}}
      {{ $resultDetail := unmarshalResultDetail $task.Result.String }}
      <tbody>
        <tr class="TaskList-item TaskList-itemSummary TaskList-expandableItem">
          <td class="TaskList-itemCol TaskList-itemExpand">
            <span class="TaskList-itemExpandClosed">
              <img class="TaskList-itemExpandControl" alt="unfold more" src="{{baseLink "/static/images/chevron_right_black_24dp.svg"}}" />
            </span>
            <span class="TaskList-ItemExpandOpened">
              <img class="TaskList-itemExpandControl" alt="unfold less" src="{{baseLink "/static/images/expand_more_black_24dp.svg"}}" />
            </span>
          </td>
          <td class="TaskList-itemCol TaskList-itemState">
            {{if $task.Error.Valid}}
              <img class="TaskList-itemStateIcon" alt="error" src="{{baseLink "/static/images/error_red_24dp.svg"}}" />
            {{else if $task.Finished}}
              <img
                class="TaskList-itemStateIcon"
                alt="finished"
                src="{{baseLink "/static/images/check_circle_green_24dp.svg"}}" />
            {{else}}
              <img
                class="TaskList-itemStateIcon"
                alt="pending"
                src="{{baseLink "/static/images/pending_yellow_24dp.svg"}}" />
            {{end}}
          </td>
          <td class="TaskList-itemCol TaskList-itemName">
            {{$task.Name}}
          </td>
          <td class="TaskList-itemCol TaskList-itemStarted">
            {{$task.CreatedAt.UTC.Format "Mon Jan _2 2006 15:04:05"}}
          </td>
          <td class="TaskList-itemCol TaskList-itemUpdated">
            {{$task.UpdatedAt.UTC.Format "Mon Jan _2 2006 15:04:05"}}
          </td>
          <td class="TaskList-itemCol TaskList-itemResult">
            {{if $task.ApprovedAt.Valid}}
                Approved
            {{else}}
              {{ $resultDetail.Kind }}
            {{end}}
          </td>
          <td class="TaskList-itemCol TaskList-itemAction">
            {{if $task.Error.Valid}}
              <div class="TaskList-retryTask">
                <form action="{{baseLink (printf "/workflows/%s/tasks/%s/retry" $workflow.ID $task.Name)}}" method="post">
                  <input type="hidden" id="workflow.id" name="workflow.id" value="{{$workflow.ID}}" />
                  <input class="Button Button--small" name="task.reset" type="submit" value="Retry" onclick="return this.form.reportValidity() && confirm('This will retry the task and clear workflow errors.\n\nReady to proceed?')" />
                </form>
              </div>
            {{end}}
            {{if and (not $task.ApprovedAt.Valid) ($task.ReadyForApproval)}}
              <div class="TaskList-approveTask">
                <form action="{{baseLink (printf "/workflows/%s/tasks/%s/approve" $workflow.ID $task.Name)}}" method="post">
                  <input type="hidden" id="workflow.id" name="workflow.id" value="{{$workflow.ID}}" />
                  <input class="Button Button--small" name="task.approve" type="submit" value="Approve" onclick="return this.form.reportValidity() && confirm('This will mark the task approved and resume the workflow.\n\nReady to proceed?')" />
                </form>
              </div>
            {{end}}
          </td>
        </tr>
        <tr class="TaskList-itemLogsRow">
          <td class="TaskList-itemLogs" colspan="5">
            {{if $task.Error.Valid}}
              <div class="TaskList-itemLogLine TaskList-itemLogLineError">
                {{- $task.Error.Value -}}
              </div>
            {{end}}
            {{if $task.ApprovedAt.Valid}}
              <div class="TaskList-itemLogLine TaskList-itemLogLineApproved">
                  {{- printf "Approved at: %s" ($task.ApprovedAt.Value.UTC.Format "2006/01/02 15:04:05") -}}
              </div>
            {{end}}
            {{range $log := index $.TaskLogs $task.Name}}
              <div class="TaskList-itemLogLine">
                {{- printf "%s %s" ($log.CreatedAt.UTC.Format "2006/01/02 15:04:05") $log.Body -}}
              </div>
            {{end}}
            {{if $task.Result.Valid}}
              <div class="TaskList-itemLogLine">
                {{- $task.Result.String -}}
              </div>
            {{end}}
          </td>
          <td class="TaskList-itemResultDetail" colspan="2">
            {{template "itemResult" $resultDetail}}
          </td>
        </tr>
      </tbody>
    {{end}}
  </table>
{{end}}

{{define "itemResult"}}
  {{if eq .Kind "Artifact"}}
    <dl class="TaskList-itemResultDetailList">
      <dt class="TaskList-itemResultTerm">Name</dt>
      <dd class="TaskList-itemResultDefinition">
        {{with .Artifact.Target}}
          {{.Name}}
        {{else}}
          {{.Artifact.Filename}}
        {{end}}
      </dd>
      <dt class="TaskList-itemResultTerm">Filename</dt>
      <dd class="TaskList-itemResultDefinition">
          {{.Artifact.Filename}}
      </dd>
      <dt class="TaskList-itemResultTerm">ScratchPath</dt>
      <dd class="TaskList-itemResultDefinition">
          {{.Artifact.ScratchPath}}
      </dd>
      <dt class="TaskList-itemResultTerm">StagingPath</dt>
      <dd class="TaskList-itemResultDefinition">
          {{.Artifact.StagingPath}}
      </dd>
    </dl>
  {{else if eq .Kind "Outputs"}}
    {{range $key, $value := .Outputs}}
      <dt class="TaskList-itemResultTerm">
        {{$key}}
      </dt>
      <dd class="TaskList-itemResultDefinition">
        {{template "itemResult" $value}}
      </dd>
    {{end}}
  {{else if eq .Kind "JSON"}}
    {{range $key, $value := .JSON}}
      <dt class="TaskList-itemResultTerm">
        {{$key}}
        </dt>
      <dd class="TaskList-itemResultDefinition">
        {{$value}}
      </dd>
    {{end}}
  {{else if eq .Kind "String"}}
    <dt class="TaskList-itemResultTerm">
      String
    </dt>
    <dd class="TaskList-itemResultDefinition TaskList-itemResultDefinition--string">
      {{.String}}
    </dd>
  {{else if eq .Kind "Slice"}}
    {{with .Slice}}
      {{if eq (index . 1).Kind "Artifact"}}
        <dt class="TaskList-itemResultTerm">Filenames</dt>
        <dd class="TaskList-itemResultDefinition">
          {{range $detail := .}}
            {{with $detail.Artifact}}
            {{.Filename}} <span class="TaskList-itemResultArtifactSize">{{prettySize .Size}}</span>
            {{end}}
          {{end}}
        </dd>
      {{else}}
        {{range $value := .}}
          <dt class="TaskList-itemResultTerm">
            {{$value.Kind}}
          </dt>
          <dd class="TaskList-itemResultDefinition TaskList-itemResultDefinition--string">
            {{template "itemResult" $value}}
          </dd>
        {{end}}
      {{end}}
    {{end}}
  {{else if eq .Kind "Number"}}
    {{.Number}}
  {{else}}
    {{with .}}
      {{.Unknown}}
    {{end}}
  {{end}}
{{end}}
