<!--
    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 if $task.Started}}
              <img
                class="TaskList-itemStateIcon"
                alt="started"
                src="{{baseLink "/static/images/pending_yellow_24dp.svg"}}" />
            {{else}}
              <img
                class="TaskList-itemStateIcon"
                alt="pending"
                src="{{baseLink "/static/images/pending_grey_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.MostRecentUpdate.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>
            {{else 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>
      {{template "itemResult" $value}}
    {{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"}}
    <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}}
            <div class="TaskList-itemResultArtifact">
              <div class="TaskList-itemResultArtifactName">
                {{if .Filename}}
                  {{.Filename}}
                {{else if .Target}}
                  {{.Target.Name}}
                {{else }}
                  {{pathBase .ScratchPath}}
                {{end}}
              </div>
              <div class="TaskList-itemResultArtifactSize">{{prettySize .Size}}</div>
            </div>
            {{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}}
