<!--
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="gr-message.html">

<dom-module id="gr-messages-list">
  <template>
    <style>
      :host {
        display: block;
      }
      h3 {
        margin-bottom: .35em;
      }
      h3,
      gr-message {
        padding: 0 var(--default-horizontal-margin);
      }
    </style>
    <h3>Messages</h3>
    <template is="dom-repeat" items="{{messages}}" as="message">
      <gr-message change-num="[[changeNum]]"
                  message="[[message]]"
                  comments="[[_computeCommentsForMessage(comments, message, index)]]"></gr-message>
    </template>
  </template>
  <script>
  (function() {
    'use strict';

    Polymer({
      is: 'gr-messages-list',

      properties: {
        changeNum: Number,
        messages: {
          type: Array,
          value: [],
        },
        comments: Object,
      },

      _computeCommentsForMessage: function(comments, message, index) {
        var comments = comments || {};
        var messages = this.messages || [];
        var msgComments = {};
        var mDate = util.parseDate(message.date);
        var nextMDate;
        if (index < messages.length - 1) {
          nextMDate = util.parseDate(messages[index + 1].date);
        }
        for (var file in comments) {
          var fileComments = comments[file];
          for (var i = 0; i < fileComments.length; i++) {
            var cDate = util.parseDate(fileComments[i].updated);
            if (cDate >= mDate) {
              if (nextMDate && cDate >= nextMDate) {
                continue;
              }
              msgComments[file] = msgComments[file] || [];
              msgComments[file].push(fileComments[i]);
            }
          }
        }
        return msgComments;
      },

    });
  })();
  </script>
</dom-module>
