'use strict';
/**
 * ### RTM Generic Response
 *
 * This Class represents a generic Response from the RTM API Server.
 * The `RTMError` and `RTMSuccess` Classes represent the actual failed
 * and successful responses from the RTM API Server.
 *
 * This Class is extended by the {@link RTMSuccess} and {@link RTMError} Classes.
 * @class
 * @alias RTMResponse
 */
class RTMResponse {
  /**
   * Create a new Generic RTM Response with a status of either
   * {@link RTMResponse.STATUS_OK} or {@link RTMResponse.STATUS_FAIL}.
   * @param {string} status RTM API Status
   * @constructor
   */
  constructor(status) {
    this._status = status;
  }
  /**
   * The RTM Response Status
   * @type {string}
   */
  get status() {
    return this._status;
  }
  /**
   * The success of the RTM Response (ie, is `true` when status is 'ok')
   * @type {boolean}
   */
  get isOk() {
    return this._status === RTMResponse.STATUS_OK;
  }
  /**
   * The RTM API properties of the Response
   * @type {object}
   */
  get props() {
    let rtn = {};
    for ( let key in this ) {
      if ( this.hasOwnProperty(key) && key !== '_status' ) {
        rtn[key] = this[key];
      }
    }
    return rtn;
  }
  /**
   * Check if the Response has the specified property
   * @param {string} property Property Name
   * @returns {boolean}
   */
  has(property) {
    let parts = property.split('.');
    let object = this;
    for ( let i = 0; i < parts.length; i++ ) {
      object = object[parts[i]];
      if ( object === undefined ) {
        return false;
      }
    }
    return true;
  }
  /**
   * Get a String representation of the Response
   * @returns {string}
   */
  toString() {
    return "[" + this._status + "]";
  }
}
/**
 * RTM Status of 'ok' = successful
 * @type {string}
 * @default
 */
RTMResponse.STATUS_OK = "ok";
/**
 * RTM Status of 'fail' = error
 * @type {string}
 * @default
 */
RTMResponse.STATUS_FAIL = "fail";
module.exports = RTMResponse;