<!--
    Copyright 2020 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.
-->
{{template "layout" .}}

{{define "content"}}
  {{- /* gotype: golang.org/x/build/internal/relui.homeResponse */ -}}
  <section class="Workflows">
    <div class="Workflows-header">
      <h2>
      {{if ne .SiteHeader.NameParam "all"}}
        {{.SiteHeader.NameParam}}
      {{else}}
        Workflows
      {{end}}
      </h2>
      <a href="{{baseLink (printf "/new_workflow?workflow.name=%s" .SiteHeader.NameParam)}}" class="Button">New</a>
    </div>
    <h2>Active Workflows</h2>
    {{template "workflow_list" .ActiveWorkflows}}
    <h2>Scheduled Workflows</h2>
    <table class="WorkflowList">
      <thead>
      <tr class="WorkflowList-itemHeader">
        <th class="WorkflowList-itemHeaderCol WorkflowList-itemStateHeader">State</th>
        <th class="WorkflowList-itemHeaderCol WorkflowList-itemName">Name</th>
        <th class="WorkflowList-itemHeaderCol WorkflowList-itemCreated">Next Run</th>
        <th class="WorkflowList-itemHeaderCol WorkflowList-itemUpdated">Last Run</th>
      </tr>
      </thead>
      <tbody>

      </tbody>
      {{- /* gotype: golang.org/x/build/internal/relui.ScheduleEntry */ -}}
      {{range $schedule := .Schedules}}
        <tr class="WorkflowList-item">
          <td class="WorkflowList-itemState">
              {{if ne $schedule.LastRun.WorkflowError.String ""}}
                <img
                        class="WorkflowList-itemStateIcon"
                        alt="{{$schedule.LastRun.WorkflowError.String}}"
                        src="{{baseLink "/static/images/error_red_24dp.svg"}}" />
              {{else if $schedule.LastRun.WorkflowFinished.Bool}}
                <img
                        class="WorkflowList-itemStateIcon"
                        alt="finished"
                        src="{{baseLink "/static/images/check_circle_green_24dp.svg"}}" />
              {{else if not $schedule.LastRun.WorkflowCreatedAt.Time.IsZero }}
                <img
                        class="WorkflowList-itemStateIcon"
                        alt="started"
                        src="{{baseLink "/static/images/pending_yellow_24dp.svg"}}" />
              {{else}}
                <img
                        class="WorkflowList-itemStateIcon"
                        alt="pending"
                        src="{{baseLink "/static/images/pending_grey_24dp.svg"}}" />
              {{end}}
          </td>
          <td class="WorkflowList-itemName">
            {{with $schedule.WorkflowJob}}
              {{.Schedule.WorkflowName}}
            {{end}}
          </td>
          <td class="WorkflowList-itemCreated">
            {{if not $schedule.Next.IsZero}}
              {{$schedule.Next.UTC.Format "Mon, 02 Jan 2006 15:04:05 MST"}}
            {{end}}
          </td>
          <td class="WorkflowList-itemUpdated">
            {{if not $schedule.LastRun.WorkflowCreatedAt.Time.IsZero }}
              <a href="{{baseLink "/workflows/" $schedule.LastRun.WorkflowID.String}}">
                {{$schedule.LastRun.WorkflowCreatedAt.Time.UTC.Format "Mon, 02 Jan 2006 15:04:05 MST"}}
              </a>
            {{else if not $schedule.Prev.IsZero}}
              {{$schedule.Prev.UTC.Format "Mon, 02 Jan 2006 15:04:05 MST"}}
            {{end}}
          </td>
        </tr>
      {{else}}
        <tr>
          <td>None</td>
        </tr>
      {{end}}
    </table>
    <h2>Completed Workflows</h2>
    {{template "workflow_list" .InactiveWorkflows}}
  </section>
{{end}}

{{- /* gotype: []golang.org/x/build/internal/relui/db.Workflow */ -}}
{{define "workflow_list"}}
  <table class="WorkflowList">
    <thead>
      <tr class="WorkflowList-itemHeader">
        <th class="WorkflowList-itemHeaderCol WorkflowList-itemStateHeader">State</th>
        <th class="WorkflowList-itemHeaderCol WorkflowList-itemName">Name</th>
        <th class="WorkflowList-itemHeaderCol WorkflowList-itemCreated">Created</th>
        <th class="WorkflowList-itemHeaderCol WorkflowList-itemUpdated">Updated</th>
      </tr>
    </thead>
    <tbody>
      {{- /* gotype: golang.org/x/build/internal/relui/db.Workflow */ -}}
      {{range .}}
        <tr class="WorkflowList-item">
          <td class="WorkflowList-itemState">
            {{if .Error}}
              <img
                class="WorkflowList-itemStateIcon"
                alt="error"
                src="{{baseLink "/static/images/error_red_24dp.svg"}}" />
            {{else if .Finished}}
              <img
                class="WorkflowList-itemStateIcon"
                alt="finished"
                src="{{baseLink "/static/images/check_circle_green_24dp.svg"}}" />
            {{else}}
              <img
                class="WorkflowList-itemStateIcon"
                alt="started"
                src="{{baseLink "/static/images/pending_yellow_24dp.svg"}}" />
            {{end}}
          </td>
          <td class="WorkflowList-itemName">
            <a href="{{baseLink "/workflows/" .ID.String}}">{{.Name.String}}</a>
          </td>
          <td class="WorkflowList-itemCreated">
            {{.CreatedAt.UTC.Format "Mon, 02 Jan 2006 15:04:05 MST"}}
          </td>
          <td class="WorkflowList-itemUpdated">
            {{.UpdatedAt.UTC.Format "Mon, 02 Jan 2006 15:04:05 MST"}}
          </td>
        </tr>
      {{else}}
        <tr>
          <td>None</td>
        </tr>
      {{end}}
    </tbody>
  </table>
{{end}}
