var isStream = require('is-stream');

/**
 * Creates an Attachment object.
 * @param 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
 */
var Attachment = module.exports = function Attachment(options) {
  var 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;
};

Attachment.prototype.getType = function () {
  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';
};