import common from '../common';

const MODULE_NAME = 'MiniAppContext';

export default {
  /**
   * 直播间事件
   * @namespace context
   */
  context: {
    /**
     * 监听直播间消息
     * @param {string} topic 消息名
     * @param {Function} callback 收到消息时回调 返回消息内容 
     */
    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);
    },

    /**
     * 获取用户信息，目前返回昵称、头像信息
     * @returns {Promise<object>} 返回用户信息，{ userNick, userAvatar }
     */
    getUserInfo() {
      return common.core.callEvent(MODULE_NAME, 'getUserInfo');
    },

    /**
     * 获取安全区域的位置
     * @return {Promise<object>} 返回安全区域位置 left, top, right, bottom
     */
    getSafeAreaPosition() {
      return common.core.callEvent(MODULE_NAME, 'getSafeAreaPosition');
    },

    /**
     * 显示红点
       * @return {Promise<object>} 返回是否显示成功
     */
    showActivityBadge() {
      return common.core.callEvent(MODULE_NAME, 'showActivityBadge');
    },

    /**
     * 显示toast
     * @param {string} message toast中显示的消息
     * @return {Promise<object>} 返回toast是否显示成功
     */
    showToast(message) {
      return common.core.callEvent(MODULE_NAME, 'showToast', message);
    },

    /**
     * @typedef {Object} LayoutInfo
     * @property {number} screenWidth 容器宽度
     * @property {number} screenHeight 容器高度
     * @property {boolean} isLandscape 是否横屏，web端固定为true
     */
    /**
     * @callback LayoutChange
     * @param {LayoutInfo} info
     */
    /**
     * 监听当前直播间小程序容器布局变化消息
     * @eapi
     * @param {LayoutChange} callback
     */
    onLayoutChange(callback) {
      return common.core.callEvent(MODULE_NAME, 'onLayoutChange', callback);
    },

    /**
     * @typedef {Object} BarrageData
     * @property {string} sendNick 发言人的昵称
     * @property {string} senderAvatarUrl 发言人的头像地址
     * @property {number} senderGender 发言人的性别
     * @property {number} nobleLevel 发言人的贵族等级
     * @property {number} fansLevel 发言人的粉丝等级
     * @property {string} content 弹幕内容
     */
    /**
     * 弹幕信息回调
     * @callback BarrageCallback 弹幕信息回调
     * @param {BarrageData} data 参数
     * @returns {boolean} 返回结果
     */
    /**
     * 监听所有弹幕
     * @param {Object} options 弹幕筛选
     * @param {string} options.sendNick 用户昵称关键字
     * @param {string} options.content 弹幕内容关键字
     * @param {number} options.nobleLevel 贵族等级
     * @param {number} options.fansLevel 粉丝等级
     * @param {BarrageCallback} callback 
     */
    onBarrageChange(options, callback) {
      return common.core.onEvent(MODULE_NAME, 'onBarrageChange', options, callback);
    },

    /**
     * 关闭监听所有弹幕
     */
    offBarrageChange(...params) {
      return common.core.offEvent(MODULE_NAME, 'offBarrageChange', ...params);
    },
  }
}