<!--
Copyright (C) 2016 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.
-->

<link rel="import" href="../../../bower_components/polymer/polymer.html">
<link rel="import" href="../../../behaviors/rest-client-behavior.html">
<link rel="import" href="../../shared/gr-account-chip/gr-account-chip.html">
<link rel="import" href="../../shared/gr-label/gr-label.html">
<link rel="import" href="../../shared/gr-date-formatter/gr-date-formatter.html">
<link rel="import" href="../../shared/gr-editable-label/gr-editable-label.html">
<link rel="import" href="../../shared/gr-linked-chip/gr-linked-chip.html">
<link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html">
<link rel="import" href="../gr-reviewer-list/gr-reviewer-list.html">

<dom-module id="gr-change-metadata">
  <template>
    <style>
      section:not(:first-of-type) {
        margin-top: 1em;
      }
      .title,
      .value {
        display: block;
      }
      .title {
        color: #666;
        font-weight: bold;
        white-space: nowrap;
      }
      gr-account-link {
        max-width: 20ch;
        overflow: hidden;
        text-overflow: ellipsis;
        vertical-align: middle;
        white-space: nowrap;
      }
      gr-editable-label {
        max-width: 9em;
      }
      .labelValueContainer:not(:first-of-type) {
        margin-top: .25em;
      }
      .labelValueContainer .approved,
      .labelValueContainer .notApproved {
        display: inline-flex;
        padding: .1em .3em;
        border-radius: 3px;
      }
      .labelValue {
        display: inline-block;
        padding-right: .3em;
      }
      .approved {
        background-color: #d4ffd4;
      }
      .notApproved {
        background-color: #ffd4d4;
      }
      .labelStatus {
        max-width: 9em;
      }
      @media screen and (max-width: 50em), screen and (min-width: 75em) {
        :host {
          display: table;
        }
        section {
          display: table-row;
        }
        section:not(:first-of-type) .title,
        section:not(:first-of-type) .value {
          padding-top: .5em;
        }
        .title,
        .value {
          display: table-cell;
          vertical-align: top;
        }
        .title {
          padding-right: .5em;
        }
      }
    </style>
    <section>
      <span class="title">Updated</span>
      <span class="value">
        <gr-date-formatter
            date-str="[[change.updated]]"></gr-date-formatter>
      </span>
    </section>
    <section>
      <span class="title">Owner</span>
      <span class="value">
        <gr-account-link account="[[change.owner]]"></gr-account-link>
      </span>
    </section>
    <template is="dom-if" if="[[_showReviewersByState]]">
      <section>
        <span class="title">Assignee</span>
        <span class="value">
          <gr-account-list
              max-count="1"
              id="assigneeValue"
              placeholder="Add assignee..."
              accounts="{{_assignee}}"
              change="[[change]]"
              readonly="[[!mutable]]"
              allow-any-user></gr-account-list>
        </span>
      </section>
      <section>
        <span class="title">Reviewers</span>
        <span class="value">
          <gr-reviewer-list
              change="{{change}}"
              mutable="[[mutable]]"
              reviewers-only></gr-reviewer-list>
        </span>
      </section>
      <section>
        <span class="title">CC</span>
        <span class="value">
          <gr-reviewer-list
              change="{{change}}"
              mutable="[[mutable]]"
              ccs-only></gr-reviewer-list>
        </span>
      </section>
    </template>
    <template is="dom-if" if="[[!_showReviewersByState]]">
      <section>
        <span class="title">Assignee</span>
        <span class="value">
          <gr-account-list
              max-count="1"
              id="assigneeValue"
              placeholder="Add assignee..."
              accounts="{{_assignee}}"
              change="[[change]]"
              readonly="[[!mutable]]"
              allow-any-user></gr-account-list>
        </span>
      </section>
      <section>
        <span class="title">Reviewers</span>
        <span class="value">
          <gr-reviewer-list
              change="{{change}}"
              mutable="[[mutable]]"></gr-reviewer-list>
        </span>
      </section>
    </template>
    <section>
      <span class="title">Project</span>
      <span class="value">[[change.project]]</span>
    </section>
    <section>
      <span class="title">Branch</span>
      <span class="value">[[change.branch]]</span>
    </section>
    <section>
      <span class="title">Topic</span>
      <span class="value">
        <template is="dom-if" if="[[change.topic]]">
          <gr-linked-chip
              text="[[change.topic]]"
              href="[[_computeTopicHref(change.topic)]]"
              removable
              on-remove="_handleTopicRemoved"></gr-linked-chip>
        </template>
        <template is="dom-if" if="[[!change.topic]]">
          <gr-editable-label
              value="{{change.topic}}"
              placeholder="[[_computeTopicPlaceholder(_topicReadOnly)]]"
              read-only="[[_topicReadOnly]]"
              on-changed="_handleTopicChanged"></gr-editable-label>
        </template>
      </span>
    </section>
    <section class="strategy" hidden$="[[_computeHideStrategy(change)]]" hidden>
      <span class="title">Strategy</span>
      <span class="value">[[_computeStrategy(change)]]</span>
    </section>
    <template is="dom-repeat"
        items="[[_computeLabelNames(change.labels)]]" as="labelName">
      <section>
        <span class="title">[[labelName]]</span>
        <span class="value">
          <template is="dom-repeat"
              items="[[_computeLabelValues(labelName, change.labels.*)]]"
              as="label">
            <div class="labelValueContainer">
              <span class$="[[label.className]]">
                <gr-label
                    has-tooltip
                    title="[[_computeValueTooltip(label.value, labelName)]]"
                    class="labelValue">
                  [[label.value]]
                </gr-label>
                <gr-account-chip
                    account="[[label.account]]"
                    data-account-id$="[[label.account._account_id]]"
                    label-name="[[labelName]]"
                    removable="[[_computeCanDeleteVote(label.account, mutable)]]"
                    transparent-background
                    on-remove="_onDeleteVote"></gr-account-chip>
              </span>
            </div>
          </template>
        </span>
      </section>
    </template>
    <template is="dom-if" if="[[_showLabelStatus]]">
      <section>
        <span class="title">Label Status</span>
        <span class="value labelStatus">
          [[_computeSubmitStatus(change.labels)]]
        </span>
      </section>
    </template>
    <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
  </template>
  <script src="gr-change-metadata.js"></script>
</dom-module>
