<!--
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="../../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-diff-comment/gr-diff-comment.html">

<dom-module id="gr-diff-comment-thread">
  <template>
    <style>
      :host {
        border: 1px solid #bbb;
        display: block;
        margin-bottom: 1px;
        white-space: normal;
      }
      #actions {
        padding: .5em .7em;
      }
      #container {
        background-color: #fcfad6;
      }
      #container.unresolved {
        background-color: #fcfaa6;
      }
      #commentInfoContainer {
        border-top: 1px dotted #bbb;
        display: flex;
        justify-content: space-between;
      }
      #unresolvedLabel {
        font-family: var(--font-family);
        margin: auto 0 auto auto;
        padding: .5em .7em;
      }
    </style>
    <div id="container" class$="[[_computeHostClass(_unresolved)]]">
      <template id="commentList" is="dom-repeat" items="[[_orderedComments]]"
          as="comment">
        <gr-diff-comment
            comment="{{comment}}"
            robot-button-disabled="[[_hideActions(_showActions, _lastComment)]]"
            change-num="[[changeNum]]"
            patch-num="[[patchNum]]"
            draft="[[comment.__draft]]"
            show-actions="[[_showActions]]"
            comment-side="[[comment.__commentSide]]"
            side="[[comment.side]]"
            project-config="[[projectConfig]]"
            on-create-fix-comment="_handleCommentFix"
            on-comment-discard="_handleCommentDiscard"></gr-diff-comment>
      </template>
      <div id="commentInfoContainer"
          hidden$="[[_hideActions(_showActions, _lastComment)]]">
        <div id="actions">
          <gr-button id="replyBtn" class="action reply"
              on-tap="_handleCommentReply">Reply</gr-button>
          <gr-button id="quoteBtn" class="action quote"
              on-tap="_handleCommentQuote">Quote</gr-button>
          <gr-button id="ackBtn" class="action ack" on-tap="_handleCommentAck">
            Ack</gr-button>
          <gr-button id="doneBtn" class="action done" on-tap="_handleCommentDone">
            Done</gr-button>
        </div>
        <span id="unresolvedLabel" hidden$="[[!_unresolved]]">Unresolved</span>
      </div>
    </div>
    <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
    <gr-storage id="storage"></gr-storage>
  </template>
  <script src="gr-diff-comment-thread.js"></script>
</dom-module>
