<!--
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-link/gr-account-link.html">
<link rel="import" href="../../shared/gr-date-formatter/gr-date-formatter.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;
      }
      .labelValueContainer:not(:first-of-type) {
        margin-top: .25em;
      }
      .labelValueContainer .approved,
      .labelValueContainer .notApproved {
        display: inline-block;
        padding: .1em .3em;
        border-radius: 3px;
      }
      .labelValue {
        display: inline-block;
      }
      .approved {
        background-color: #d4ffd4;
      }
      .notApproved {
        background-color: #ffd4d4;
      }
      @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>
    <section>
      <span class="title">Reviewers</span>
      <span class="value">
        <gr-reviewer-list
            change="[[change]]"
            mutable="[[mutable]]"
            suggest-from="[[serverConfig.suggest.from]]"></gr-reviewer-list>
      </span>
    </section>
    <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">[[change.topic]]</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]]">
                <span class="labelValue">[[label.value]]</span>
                <gr-account-link account="[[label.account]]"></gr-account-link>
              </span>
            </div>
          </template>
        </span>
      </section>
    </template>
  </template>
  <script src="gr-change-metadata.js"></script>
</dom-module>
