<!--
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-account-chip/gr-account-chip.html">
<link rel="import" href="../../shared/gr-button/gr-button.html">
<link rel="import" href="../../shared/gr-js-api-interface/gr-js-api-interface.html">
<link rel="import" href="../../shared/gr-overlay/gr-overlay.html">
<link rel="import" href="../../shared/gr-rest-api-interface/gr-rest-api-interface.html">
<link rel="import" href="../../shared/gr-storage/gr-storage.html">
<link rel="import" href="../gr-account-list/gr-account-list.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;
        width: 100%;
      }
      .peopleContainer,
      .labelsContainer,
      .actionsContainer {
        flex-shrink: 0;
      }
      .peopleContainer {
        display: table;
      }
      .peopleList {
        display: flex;
        padding-top: .1em;
      }
      .peopleListLabel {
        color: #666;
        min-width: 7em;
        padding-right: .5em;
      }
      gr-account-list {
        display: flex;
        flex-wrap: wrap;
      }
      #reviewerConfirmationOverlay {
        padding: 1em;
        text-align: center;
      }
      .reviewerConfirmationButtons {
        margin-top: 1em;
      }
      .groupName {
        font-weight: bold;
      }
      .groupSize {
        font-style: italic;
      }
      .textareaContainer {
        display: flex;
        flex: 1;
        min-height: 6em;
        position: relative;
      }
      iron-autogrow-textarea {
        padding: 0;
        font-family: var(--monospace-font-family);
      }
      .message {
        border: none;
        width: 100%;
      }
      .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 {
        flex: 1;
        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="peopleContainer">
        <div class="peopleList">
          <div class="peopleListLabel">Owner</div>
          <gr-account-chip account="[[_owner]]">
          <gr-account-chip>
        </div>
      </section>
      <section class="peopleContainer">
        <div class="peopleList">
          <div class="peopleListLabel">Reviewers</div>
          <gr-account-list
              id="reviewers"
              accounts="[[_reviewers]]"
              change="[[change]]"
              filter="[[filterReviewerSuggestion]]"
              pending-confirmation="{{_reviewerPendingConfirmation}}"
              placeholder="Add reviewer...">
          </gr-account-list>
        </div>
        <template is="dom-if" if="[[serverConfig.note_db_enabled]]">
          <div class="peopleList">
            <div class="peopleListLabel">CC</div>
            <gr-account-list
                id="ccs"
                accounts="[[_ccs]]"
                change="[[change]]"
                filter="[[filterReviewerSuggestion]]"
                pending-confirmation="{{_ccPendingConfirmation}}"
                placeholder="Add CC...">
            </gr-account-list>
          </div>
        </template>
        <gr-overlay
            id="reviewerConfirmationOverlay"
            on-iron-overlay-canceled="_cancelPendingReviewer"
            with-backdrop>
          <div class="reviewerConfirmation">
            Group
            <span class="groupName">
              {{_reviewerPendingConfirmation.group.name}}
            </span>
            has
            <span class="groupSize">
              {{_reviewerPendingConfirmation.count}}
            </span>
            members.
            <br>
            Are you sure you want to add them all?
          </div>
          <div class="reviewerConfirmationButtons">
            <gr-button on-tap="_confirmPendingReviewer">Yes</gr-button>
            <gr-button on-tap="_cancelPendingReviewer">No</gr-button>
          </div>
        </gr-overlay>
      </section>
      <section class="textareaContainer">
        <iron-autogrow-textarea
            id="textarea"
            class="message"
            placeholder="Say something..."
            disabled="{{disabled}}"
            rows="4"
            max-rows="15"
            bind-value="{{draft}}"
            on-bind-value-changed="_handleTextareaChanged">
        </iron-autogrow-textarea>
      </section>
      <section class="labelsContainer">
        <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>
      </section>
      <section class="draftsContainer" hidden$="[[_computeHideDraftList(diffDrafts)]]">
        <h3>[[_computeDraftsTitle(diffDrafts)]]</h3>
        <gr-comment-list
            comments="[[diffDrafts]]"
            change-num="[[change._number]]"
            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-js-api-interface id="jsAPI"></gr-js-api-interface>
    <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
    <gr-storage id="storage"></gr-storage>
  </template>
  <script src="gr-reply-dialog.js"></script>
</dom-module>
