/*
 * vim: ts=4:sw=4:expandtab
 */
;(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);
            }
        },
    }))();
})();