(function() {
  'use strict';
  window.Whisper = window.Whisper || {};
  Whisper.ReadSyncs = new (Backbone.Collection.extend({
    forMessage: function(message) {
      var receipt = this.findWhere({
        sender: message.get('source'),
        timestamp: message.get('sent_at'),
      });
      if (receipt) {
        console.log('Found early read sync for message');
        this.remove(receipt);
        return receipt;
      }
    },
    onReceipt: function(receipt) {
      var messages = new Whisper.MessageCollection();
      return messages.fetchSentAt(receipt.get('timestamp')).then(
        function() {
          var message = messages.find(function(message) {
            return (
              message.isIncoming() &&
              message.isUnread() &&
              message.get('source') === receipt.get('sender')
            );
          });
          if (message) {
            return message.markRead(receipt.get('read_at')).then(
              function() {
                this.notifyConversation(message);
                this.remove(receipt);
              }.bind(this)
            );
          } else {
            console.log(
              'No message for read sync',
              receipt.get('sender'),
              receipt.get('timestamp')
            );
          }
        }.bind(this)
      );
    },
    notifyConversation: function(message) {
      var conversation = ConversationController.get({
        id: message.get('conversationId'),
      });

      if (conversation) {
        conversation.onReadMessage(message);
      }
    },
  }))();
})();
