<!--
Copyright (C) 2015 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="../../../bower_components/iron-autogrow-textarea/iron-autogrow-textarea.html">
<link rel="import" href="../../../bower_components/iron-selector/iron-selector.html">
<link rel="import" href="../../../behaviors/rest-client-behavior.html">
<link rel="import" href="../../shared/gr-button/gr-button.html">
<link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html">

<dom-module id="gr-reply-dialog">
  <template>
    <style>
      :host {
        display: block;
        max-height: 90vh;
      }
      :host([disabled]) {
        pointer-events: none;
      }
      :host([disabled]) .container {
        opacity: .5;
      }
      .container {
        display: flex;
        flex-direction: column;
        max-height: 90vh;
      }
      section {
        border-top: 1px solid #ddd;
        padding: .5em .75em;
      }
      .labelsContainer,
      .actionsContainer {
        flex-shrink: 0;
      }
      .textareaContainer {
        position: relative;
        display: flex;
      }
      iron-autogrow-textarea {
        padding: 0;
        font-family: var(--monospace-font-family);
      }
      .message {
        border: none;
        width: 100%;
      }
      .labelsNotShown {
        color: #666;
      }
      .labelContainer:not(:first-of-type) {
        margin-top: .5em;
      }
      .labelName {
        display: inline-block;
        min-width: 7em;
        margin-right: .5em;
        white-space: nowrap;
      }
      iron-selector {
        display: inline-flex;
      }
      iron-selector > gr-button {
        margin-right: .25em;
      }
      iron-selector > gr-button:first-of-type {
        border-top-left-radius: 2px;
        border-bottom-left-radius: 2px;
      }
      iron-selector > gr-button:last-of-type {
        border-top-right-radius: 2px;
        border-bottom-right-radius: 2px;
      }
      iron-selector > gr-button.iron-selected {
        background-color: #ddd;
      }
      .draftsContainer {
        overflow-y: auto;
      }
      .draftsContainer h3 {
        margin-top: .25em;
      }
      .actionsContainer {
        display: flex;
        justify-content: space-between;
      }
      .action:link,
      .action:visited {
        color: #00e;
      }
    </style>
    <div class="container">
      <section class="textareaContainer">
        <iron-autogrow-textarea
            id="textarea"
            class="message"
            placeholder="Say something..."
            disabled="{{disabled}}"
            rows="4"
            max-rows="15"
            bind-value="{{draft}}"></iron-autogrow-textarea>
      </section>
      <section class="labelsContainer">
        <template is="dom-if" if="[[_computeShowLabels(patchNum, revisions)]]">
          <template is="dom-repeat"
              items="[[_computeLabelArray(permittedLabels)]]" as="label">
            <div class="labelContainer">
              <span class="labelName">[[label]]</span>
              <iron-selector data-label$="[[label]]"
                  selected="[[_computeIndexOfLabelValue(labels, permittedLabels, label, _account)]]">
                <template is="dom-repeat"
                    items="[[_computePermittedLabelValues(permittedLabels, label)]]"
                    as="value">
                  <gr-button has-tooltip data-value$="[[value]]"
                      title$="[[_computeLabelValueTitle(labels, label, value)]]">[[value]]</gr-button>
                </template>
              </iron-selector>
            </div>
          </template>
        </template>
        <template is="dom-if" if="[[!_computeShowLabels(patchNum, revisions)]]">
          <span class="labelsNotShown">
            Labels are not shown because this is not the most recent patch set.
            <a href$="/c/[[changeNum]]">Go to the latest patch set.</a>
          </span>
        </template>
      </section>
      <section class="draftsContainer" hidden$="[[_computeHideDraftList(diffDrafts)]]">
        <h3>[[_computeDraftsTitle(diffDrafts)]]</h3>
        <gr-comment-list
            comments="[[diffDrafts]]"
            change-num="[[changeNum]]"
            patch-num="[[patchNum]]"></gr-comment-list>
      </section>
      <section class="actionsContainer">
        <gr-button primary class="action send" on-tap="_sendTapHandler">Send</gr-button>
        <gr-button
            id="cancelButton"
            class="action cancel"
            on-tap="_cancelTapHandler">Cancel</gr-button>
      </section>
    </div>
    <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
  </template>
  <script src="gr-reply-dialog.js"></script>
</dom-module>
