'use strict';

/**
 * Interface for classes that Filter
 *
 * @interface Filter
 */

/**
 * Before filter
 *
 * @function
 * @name Filter#before
 * @param {object} msg message 
 * @param {object} session 
 * @param {function} next callback Function 
 */

 /**
 * After filter
 *
 * @function
 * @name Filter#after
 * @param {object} err 
 * @param {object} msg 
 * @param {object} session 
 * @param {object} resp 
 * @param {function} next 
 */



/**
 * BaseFilter is a filter base class that can be extended.
 * @class
 * @implements {Filter}
 */
class BaseFilter {

  /** Before filter
   * @param {object} msg message 
   * @param {object} session 
   * @param {function} next callback Function 
   */
  before (msg, session, next) { 
    next();
  }
  
  /** After filter
   * @param {object} err 
   * @param {object} msg 
   * @param {object} session 
   * @param {object} resp 
   * @param {function} next 
   */
  after (err, msg, session, resp, next) {
    next(err);
  }
}

module.exports = BaseFilter;