const isStream = require('is-stream')

/**
 * Creates an Attachment object.
 * @param {Object} options Buffer representing attachment data
 *                data  - one of:
 *                      - string representing the full file path
 *                      - buffer of the data
 *                      - readable interface (stream)
 *                filename - optionally the filename to be used for the attachment, should be used if passing
 *                           buffer or stream in the data param
 *                contentType - the content type for header info. Should be passed in if using stream for data
 *                knownLength - the known length of the data. Should be passed in if using stream for data
 * @constructor
 */
class Attachment {
  constructor (options) {
    const data = options.data

    if (data) {
      if (typeof data === 'string' || Buffer.isBuffer(data) || isStream(data)) {
        this.data = data
      }
    }

    this.filename = options.filename
    this.contentType = options.contentType
    this.knownLength = options.knownLength
  }

  getType () {
    if (this.data) {
      if (typeof this.data === 'string') {
        return 'path'
      } else if (Buffer.isBuffer(this.data)) {
        return 'buffer'
      } else if (isStream(this.data)) {
        return 'stream'
      }
    }

    return 'unknown'
  }
}

module.exports = Attachment