Source: models/message.js

module.exports = Message

var debug = require('debug')('snapchat:message')

var constants = require('../lib/constants')

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

  var message = params['chat_message'] || params
  var header = message['header']
  var body = message['body'] || { }
  var media = body['media']
  var type = body['type']

  self.identifier = message['id']
  self.messageIdentifier = message['chat_message_id']
  self.pagination = params['iter_token']
  self.messageKind = constants.messageKindFromString(type)
  self.created = new Date(+message['timestamp'])

  if (self.messageKind === null) {
    debug('invalid MessageKind (%s %j)', type, params)
  } else if (self.messageKind === constants.MessageKind.Text.value) {
    self.text = body['text']
  } else if (media) {
    self.mediaIdentifier = media['media_id']
    self.mediaSize = {
      'width': media['width'] | 0,
      'height': media['height'] | 0
    }
    self.mediaIV = media['iv']
    self.mediaKey = media['key']
    self.mediaType = media['media_type']

    if (self.mediaType) {
      self.mediaType = 'UNSPECIFIED'
    } else if (self.mediaType !== 'VIDEO') {
      debug('new message type (%s)', self.mediaType)
    }
  }

  self.conversationIdentifier = header['conv_id']

  self.recipients = header['to']
  self.sender = header['from']

  self.index = message['seq_num'] | 0
  self.savedState = message['saved_state']
  self.type = message['type']

  if (self.type !== 'chat_message') {
    debug('unknown chat message type (%s %j)', self.type, params)
  }
}