import common from '../common';

const MODULE_NAME = 'MiniAppObserver';

export default {
  /**
   * 监听后台消息
   * @namespace observer
   */
  observer: {
    /**
     * 监听后台消息
     * @param {string} topic 消息名
     * @param {Function} callback 收到消息时回调 返回对应消息名的后台消息content
     */
    on(topic, callback) {
      return common.core.callEventSync(MODULE_NAME, 'on', topic, callback);
    },

    /**
     * 取消监听后台消息
     * @param {string} topic 消息名
     * @param {Function} callback 
     */
    off(topic, callback) {
      return common.core.callEventSync(MODULE_NAME, 'off', topic, callback);
    },

    /**
     * 触发小程序消息
     * @param {string} topic 
     * @param {string} message
     * @returns {Promise<any>} 
     */
    emit(topic, message) {
      return common.core.callEvent(MODULE_NAME, 'emit', topic, message);
    },

    /**
     * 监听自身小程序消息
     * @param {Object} params
     * @param {string} params.eventName 消息名
     * @param {Function} params.callback 回调
     */
    onLocalMessage({ eventName, callback }) {
      return common.core.onEvent(MODULE_NAME, 'onLocalMessage', { eventName, callback });
    },

    /**
     * 取消监听自身小程序消息
     * @param {Object} params
     * @param {string} params.eventName 消息名
     */
    offLocalMessage({ eventName }) {
      return common.core.offEvent(MODULE_NAME, 'offLocalMessage', { eventName });
    },

    /**
     * 发送小程序消息
     * @param {Object} params
     * @param {string} params.eventName 消息名
     * @param {Function} params.callback 回调
     * @returns {Promise<any>} 
     */
    postLocalMessage({ eventName, message }) {
      return common.core.callEvent(MODULE_NAME, 'postLocalMessage', { eventName, message });
    }
  }
}