<!--
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; }
        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;
        }
      </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 on-tap="_switch_expand" class="cursor"> Tasks </h3>
          <template is="dom-if" if="[[_expand_all]]">
            <gr-button
                on-tap="_show_all_tap"
                disabled="[[_is_show_all(_show_all)]]"> Show All </gr-button>
            <gr-button
                on-tap="_needs_and_blocked_tap"
                disabled="[[!_is_show_all(_show_all)]]"> Needs + Blocked</gr-button>
          </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>
