<!--
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-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">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">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">
        <gr-editable-label
            value="{{change.topic}}"
            placeholder="[[_computeTopicPlaceholder(_topicReadOnly)]]"
            read-only="[[_topicReadOnly]]"
            on-changed="_handleTopicChanged"></gr-editable-label>
      </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>
