<!--
@license
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-icon/iron-icon.html">
<link rel="import" href="../../shared/gr-icons/gr-icons.html">
<link rel="import" href="../../../behaviors/fire-behavior/fire-behavior.html">
<link rel="import" href="../../../behaviors/gr-path-list-behavior/gr-path-list-behavior.html">
<link rel="import" href="../../../styles/shared-styles.html">
<link rel="import" href="../../core/gr-navigation/gr-navigation.html">
<link rel="import" href="../../core/gr-reporting/gr-reporting.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-comment/gr-comment.html">

<dom-module id="gr-comment-thread">
  <template>
    <style include="shared-styles">
      :host {
        font-family: var(--font-family);
        font-size: var(--font-size-normal);
        font-weight: var(--font-weight-normal);
        line-height: var(--line-height-normal);
      }
      gr-button {
        margin-left: var(--spacing-m);
      }
      #actions {
        margin-left: auto;
        padding: var(--spacing-m);
      }
      #container {
        background-color: var(--comment-background-color);
        color: var(--comment-text-color);
        display: block;
        margin: 0 4px 4px 4px;
        white-space: normal;
        box-shadow: var(--elevation-level-2);
        border-radius: var(--border-radius);
        /** This is required for firefox to continue the inheritance */
        -webkit-user-select: inherit;
        -moz-user-select: inherit;
        -ms-user-select: inherit;
        user-select: inherit;
      }
      #container.unresolved {
        background-color: var(--unresolved-comment-background-color);
      }
      #container.robotComment {
        background-color: var(--robot-comment-background-color);
      }
      #commentInfoContainer {
        border-top: 1px dotted var(--border-color);
        display: flex;
      }
      #unresolvedLabel {
        font-family: var(--font-family);
        margin: auto 0;
        padding: var(--spacing-m);
      }
      .pathInfo {
        display: flex;
        align-items: baseline;
      }
      .descriptionText {
        margin-left: var(--spacing-m);
        font-style: italic;
      }
      .invalidLineNumber {
        padding: var(--spacing-m);
      }
      .invalidLineNumberText {
        color: var(--error-text-color);
      }
      .invalidLineNumberIcon {
        color: var(--error-text-color);
        vertical-align: top;
        margin-right: var(--spacing-s);
      }

    </style>
    <template is="dom-if" if="[[showFilePath]]">
      <div class="pathInfo">
        <a href$="[[_getDiffUrlForComment(projectName, changeNum, path, patchNum)]]">[[_computeDisplayPath(path)]]</a>
        <span class="descriptionText">Patchset [[patchNum]]</span>
      </div>
    </template>
    <div id="container" class$="[[_computeHostClass(unresolved, isRobotComment)]]">
      <template is="dom-if" if="[[invalidLineNumber]]">
        <div class="invalidLineNumber">
          <span class="invalidLineNumberText"><iron-icon icon="gr-icons:error" class="invalidLineNumberIcon"></iron-icon>This comment thread is attached to non-existing line [[lineNum]].</span>
        </div>
      </template>
      <template id="commentList" is="dom-repeat" items="[[_orderedComments]]"
          as="comment">
        <gr-comment
            comment="{{comment}}"
            comments="{{comments}}"
            robot-button-disabled="[[_shouldDisableAction(_showActions, _lastComment)]]"
            change-num="[[changeNum]]"
            patch-num="[[patchNum]]"
            draft="[[_isDraft(comment)]]"
            show-actions="[[_showActions]]"
            comment-side="[[comment.__commentSide]]"
            side="[[comment.side]]"
            project-config="[[_projectConfig]]"
            on-create-fix-comment="_handleCommentFix"
            on-comment-discard="_handleCommentDiscard"
            on-comment-save="_handleCommentSavedOrDiscarded"></gr-comment>
      </template>
      <div id="commentInfoContainer"
          hidden$="[[_hideActions(_showActions, _lastComment)]]">
        <span id="unresolvedLabel" hidden$="[[!unresolved]]">Unresolved</span>
        <div id="actions">
          <gr-button
              id="replyBtn"
              link
              class="action reply"
              on-click="_handleCommentReply">Reply</gr-button>
          <gr-button
              id="quoteBtn"
              link
              class="action quote"
              on-click="_handleCommentQuote">Quote</gr-button>
          <gr-button
              id="ackBtn"
              link
              class="action ack"
              on-click="_handleCommentAck">Ack</gr-button>
          <gr-button
              id="doneBtn"
              link
              class="action done"
              on-click="_handleCommentDone">Done</gr-button>
        </div>
      </div>
    </div>
    <gr-reporting id="reporting"></gr-reporting>
    <gr-rest-api-interface id="restAPI"></gr-rest-api-interface>
    <gr-storage id="storage"></gr-storage>
  </template>
  <script src="gr-comment-thread.js"></script>
</dom-module>
