Source: models/conversation.js

module.exports = Conversation

var debug = require('debug')('snapchat:conversation')
var Snap = require('./snap')

var Message = require('./message')
var CashTransaction = require('./cash-transaction')
var Transaction = require('./transaction')

/**
 * Snapchat Conversation
 *
 * @class
 * @param {Object} params
 */
function Conversation (params) {
  var self = this
  if (!(self instanceof Conversation)) return new Conversation(params)

  var convoMessages = params['conversation_messages'] || { }
  var lastChatActions = params['last_chat_actions']
  var lastTransaction = params['last_cash_transaction']
  var pendingRecievedSnaps = params['pending_received_snaps'] || []
  var messages = convoMessages['messages'] || []
  var lastSnap = params['last_snap']
  var lastInteraction = +params['last_interaction_ts']

  self.messagingAuth = convoMessages['messaging_auth']

  self.state = params['conversation_state']
  self.identifier = params['id']
  self.pagination = params['iter_token']

  self.lastSnap = lastSnap ? new Snap(lastSnap) : null
  self.lastTransaction = lastTransaction ? new Transaction(lastTransaction) : null
  self.lastInteraction = lastInteraction > 0 ? new Date(lastInteraction) : null
  if (lastChatActions) {
    // self.lastChatType = SKChatTypeFromString(lastChatActions['last_write_type'])
    // self.lastChatRead = +NSDate dateWithTimeIntervalSince1970:[lastChatActions['last_read_timestamp']/1000]
    // self.lastChatWrite = +NSDate dateWithTimeIntervalSince1970:[lastChatActions['last_write_timestamp']/1000]
    self.lastChatReader = lastChatActions['last_reader']
    self.lastChatWriter = lastChatActions['last_writer']
  }

  self.participants = params['participants'] || self.identifier.split('~')
  self.usersWithPendingChats = params['pending_chats_for'] || []

  // Messages
  self.messages = messages.map(function (message) {
    if (message['snap']) {
      return new Snap(message['snap'])
    } else if (message['chat_message']) {
      return new Message(message['chat_message'])
    } else if (message['cash_transaction']) {
      return new CashTransaction(message['chat_transaction'])
    } else {
      debug('Unhandled conversation message type:%s', message)
      return null
    }
  })

  // Pending recieved snaps
  self.pendingRecievedSnaps = pendingRecievedSnaps.map(function (snap) {
    return new Snap(snap)
  })
}

Conversation.prototype.addMessagesFromConversation = function (convo) {
  var self = this
  if (!convo.messages.count) return

  self.messages = self.messages.concat(convo.messages)
}