"use strict";

/**
 * @file Component for monitor.
 * Load and start monitor client.
 */
const Monitor = require('../monitor/monitor');
const BaseComp = require('../../base/base_component');

/**
 * @typedef {import('../application').Application} Application
 */

/**
 * Monitor component class
 * @typedef {MonitorComp} MonitorComp
 * @ignore
 */

/**
 * @class
 * @implements {Component}
 */
class MonitorComp extends BaseComp{
/**
 *
   * @param {Application} app current application context
   * @param {object} opts component opts
 */
  constructor(app, opts){
    super(app, opts);
    this.name = '__monitor__';
    this.monitor = new Monitor(app, opts);
  }


  start (cb) {
    this.monitor.start(cb);
  }

  stop(force, cb) {
    this.monitor.stop(cb);
  }

  reconnect(masterInfo) {
    this.monitor.reconnect(masterInfo);
  }
}



/**
 * Component factory function
 *
 * @param  {Object} app  current application context
 * @return {Object}      component instances
 */
module.exports = function(app, opts) {
  return new MonitorComp(app, opts);
};