<!--
Copyright (C) 2019 The Android Open Source Project

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->

<dom-module id="gr-task-plugin">
  <template>
      <style>
        ul {
          padding-left: 0.5em;
          margin-top: 0;
        }
        h3 { padding-left: 0.1em; }
        .cursor { cursor: pointer; }
        #tasks_header {
          align-items: center;
          background-color: #fafafa;
          border-top: 1px solid #ddd;
          display: flex;
          padding: 6px 1rem;
        }
        .links {
          color: blue;
          cursor: pointer;
          text-decoration: underline;
        }
        .no-margins { margin: 0 0 0 0; }
      </style>

      <div id="tasks" hidden$="[[!_tasks.length]]">
        <div id="tasks_header" style="display: flex;">
          <iron-icon
              icon="gr-icons:expand-less"
              hidden$="[[!_expand_all]]"
              on-tap="_switch_expand"
              class="cursor"> </iron-icon>
          <iron-icon
              icon="gr-icons:expand-more"
              hidden$="[[_expand_all]]"
              on-tap="_switch_expand"
              class="cursor"> </iron-icon>
          <div style="display: flex; align-items: center; column-gap: 1em;">
          <h3 class="no-margins" on-tap="_switch_expand" class="cursor"> Tasks </h3>
          <template is="dom-if" if="[[_is_show_all(_show_all)]]">
            <p class="no-margins">All ([[_all_count]]) |&nbsp;
              <span
                  on-click="_needs_and_blocked_tap"
                  class="links">Needs + Blocked ([[_ready_count]], [[_fail_count]])</span>
            <p>
          </template>
          <template is="dom-if" if="[[!_is_show_all(_show_all)]]">
            <p class="no-margins"> <span
                  class="links"
                  on-click="_show_all_tap">All ([[_all_count]])</span>
              &nbsp;| Needs + Blocked ([[_ready_count]], [[_fail_count]])</p>
          </template>
        </div>
        </div>
        <div hidden$="[[!_expand_all]]">
          <ul style="list-style-type:none;">
            <gr-task-plugin-tasks
                tasks="[[_tasks]]"
                show_all$="[[_show_all]]"> </gr-task-plugin-tasks>
          </ul>
        </div>
      </div>
  </template>
  <script src="gr-task-plugin.js"></script>
</dom-module>

<dom-module id="gr-task-plugin-tasks">
  <template>
    <template is="dom-repeat" as="task" items="[[tasks]]">
      <template is="dom-if" if="[[_can_show(show_all, task)]]">
        <li>
          <style>
            /* Matching colors with core code. */
            .green {
              color: #9fcc6b;
            }
            .red {
              color: #FFA62F;
            }
          </style>
          <template is="dom-if" if="[[task.icon.id]]">
            <gr-tooltip-content
                has-tooltip
                title="In Progress">
                <iron-icon
                  icon="gr-icons:hourglass"
                  class="green"
                  hidden$="[[!task.in_progress]]">
                </iron-icon>
            </gr-tooltip-content>
            <gr-tooltip-content
                has-tooltip
                title$="[[task.icon.tooltip]]">
                <iron-icon
                  icon="[[task.icon.id]]"
                  class$="[[task.icon.color]]">
                </iron-icon>
            </gr-tooltip-content>
          </template>
          [[task.message]]
        </li>
      </template>
      <gr-task-plugin-tasks
          tasks="[[task.sub_tasks]]"
          show_all$="[[show_all]]"> </gr-task-plugin-tasks>
    </template>
  </template>
  <script>
      Polymer({
        is: 'gr-task-plugin-tasks',
        properties: {
          tasks: {
            type: Array,
            notify: true,
            value() { return []; },
          },

          show_all: {
            type: String,
            notify: true,
          },
        },

        _can_show(show, task) {
          return show === 'true' || task.showOnFilter;
        },
      });
  </script>
</dom-module>
