/**
 * tabBar相关接口
 */
import { callNative, emptyFn } from './util';

export default {
    /**
     * 动态设置 tabBar 某一项的内容
     *
     * @param {Object} options
     * @param {Number} options.index tabBar 的哪一项，从左边算起
     * @param {String} options.text tab 上的按钮文字
     * @param {String} options.iconPath 图片路径
     * @param {String} options.selectedIconPath 选中时的图
     * @param {Object} options.success 成功回调
     * @param {Object} options.fail 失败回调
     */
    setTabBarItem(options = {}) {
        callNative('setTabBarItem', options);
    },
    /**
     * 动态设置 tabBar 的整体样式
     *
     * @param {Object} options
     * @param {String} options.color tab 上的文字默认颜色，HexColor
     * @param {String} options.selectedColor tab 上的文字选中时的颜色，HexColor
     * @param {String} options.backgroundColor tab 的背景色，HexColor
     * @param {String} options.borderStyle tabBar上边框的颜色， 仅支持 black/white
     */
    setTabBarStyle(options = {}) {
        callNative('setTabBarStyle', options);
    },
    /**
     * 隐藏 tabBar
     *
     * @param {Object} options
     * @param {Boolean} [options.animation = false] 是否需要动画效果
     * @param {Function} [options.success = emptyFn] 成功回调
     * @param {Function} [options.fail = emptyFn] 失败回调
     */
    showTabBar({
        animation = false,
        success = emptyFn,
        fail = emptyFn,
        complete = emptyFn
    } = {}) {
        callNative('showTabBar', { animation: !!animation, success, fail, complete });
    },
    /**
     * 隐藏 tabBar
     *
     * @param {Object} options
     * @param {Boolean} [options.animation = false] 是否需要动画效果
     * @param {Function} [options.success = emptyFn] 成功回调
     * @param {Function} [options.fail = emptyFn] 失败回调
     */
    hideTabBar({
        animation = false,
        success = emptyFn,
        fail = emptyFn,
        complete = emptyFn
    } = {}) {
        callNative('hideTabBar', { animation: !!animation, success, fail, complete });
    },
    /**
     * 显示 tabBar 某一项的右上角的红点
     *
     * @param {Object} options
     * @param {Number} options.index tabBar 的哪一项，从左边算起
     * @param {Function} options.success 成功回调
     * @param {Function} options.fail 失败回调
     */
    showTabBarRedDot(options = {}) {
        callNative('showTabBarRedDot', options, { index: 'Number' });
    },
    /**
     * 隐藏 tabBar 某一项的右上角的红点
     *
     * @param {Object} options
     * @param {Number} options.index tabBar 的哪一项，从左边算起
     * @param {Function} options.success 成功回调
     * @param {Function} options.fail 失败回调
     */
    hideTabBarRedDot(options = {}) {
        callNative('hideTabBarRedDot', options, { index: 'Number' });
    },
    /**
     * 为 tabBar 某一项的右上角添加文本
     *
     * @param {Object} options
     * @param {Number} options.index tabBar 的哪一项，从左边算起
     * @param {String} options.text 显示的文本，超过 4 个字符则显示成 ...
     * @param {Function} options.success 接口调用成功的回调函数
     * @param {Function} options.fail 接口调用失败的回调函数
     */
    setTabBarBadge(options = {}) {
        callNative('setTabBarBadge', options);
    },
    /**
     * 移除 tabBar 某一项右上角的文本
     *
     * @param {Object} options
     * @param {Number} options.index tabBar 的哪一项，从左边算起
     * @param {Function} options.success 接口调用成功的回调函数
     * @param {Function} options.fail 接口调用失败的回调函数
     */
    removeTabBarBadge(options = {}) {
        callNative('removeTabBarBadge', options, { index: 'Number' });
    },
    setStatusBarHidden(options = {
        hidden: true,
        global: false
    }) {
        if (options.global !== true) options.global = false;
        options.pageId = global.__biliCacheData.getCurrentPageId();
        callNative('setStatusBarHidden', options, {
            hidden: 'Boolean'
        });
    }
};
