/**
 * 系统信息相关接口
 */
import { callNative, callNativeSync, mapBiliTheme } from './util';
import * as eventHandlers from './util/eventHandlers';
export default {
    /**
     * 获取系统信息
     *
     * @param {object} options
     * @param {function} options.success 接口调用成功的回调
     */
    getSystemInfo(options = {}) {
        const originalSuccess = options.success;
        options.success = function (systemInfo = {}) {
            const appVersion = (systemInfo.version || '');
            const platform = (systemInfo.system || '').toLowerCase();
            if (platform.indexOf('android') > -1 && typeof appVersion === 'string' && appVersion.startsWith('6.7')) {
            // Android 客户端 在v6.7版本中，遗漏SDKVersion升级的事情，导致v6.7版本和v6.6版本共享了同一个SDKVersion ： 3.12.0 。 应当升级到 3.13.0
                systemInfo.SDKVersion = '3.13.0';
            }
            systemInfo.biliTheme = mapBiliTheme(systemInfo.biliTheme);

            typeof originalSuccess === 'function' && originalSuccess.call(this, systemInfo);
        };

        // getSystemInfo没有complete回调，覆盖原始方法，避免触发该回调
        options.complete = function () {};
        callNative('getSystemInfo', options);
    },
    /**
     * 获取系统信息
     */
    getSystemInfoSync() {
        const systemInfo = callNativeSync('getSystemInfoSync').data || {};
        const appVersion = (systemInfo.version || '');
        const platform = (systemInfo.platform || '').toLowerCase();
        if (platform.indexOf('android') > -1 && typeof appVersion === 'string' && appVersion.startsWith('6.7')) {
            // Android 客户端 在v6.7版本中，遗漏SDKVersion升级的事情，导致v6.7版本和v6.6版本共享了同一个SDKVersion ： 3.12.0 。 应当升级到 3.13.0
            systemInfo.SDKVersion = '3.13.0';
        }

        systemInfo.biliTheme = mapBiliTheme(systemInfo.biliTheme);

        return systemInfo;
    },

    onThemeChange(callback) {
        if(typeof callback !== 'function') {
            throw new Error('参数须是一个函数');
        }
        eventHandlers.systemHandlers.onThemeChange.push(callback);
    },

    offThemeChange(callback) {
        if(typeof callback !== 'function') {
            eventHandlers.systemHandlers.onThemeChange.splice(0, eventHandlers.systemHandlers.onThemeChange.length);
        } else {
            const index = eventHandlers.systemHandlers.onThemeChange.indexOf(callback);
            if(index >= 0) {
                eventHandlers.systemHandlers.onThemeChange.splice(index, 1);
            }
        }

    },

    showErrorPage(options = {}) {
        callNative('showErrorPage', options);
    },
};
