/** @module native/Updater */
import { NativeModules, DeviceEventEmitter } from 'react-native';

const { Updater } = NativeModules;

/**
 * @typedef {Object} UpdateEvent 下载事件
 * @property {number} progress 下载进度，0到100的整数
 * @property {number} current 已下载字节数
 * @property {number} all 总字节数
 */

/**
 * @callback UpdateCallback 下载回调
 * @param {UpdateEvent} event 下载事件
 */

/**
 * @typedef {Object} CallbackHandle
 */

/**
 * @member {Function} CallbackHandle~remove
 */

/**
 *
 * @param {UpdateCallback} cb 下载回调
 * @return {CallbackHandle} 回调具柄，用以删除回调
 */
export const addUpdaterDownloadingCallback = (cb) => {
  return DeviceEventEmitter.addListener('Updater/downloading', cb);
};

/**
 *
 * @param {UpdateCallback} cb 下载回调
 * @return {CallbackHandle} 回调具柄，用以删除回调
 */
export const addUpdaterDownloadedCallback = (cb) => {
  return DeviceEventEmitter.addListener('Updater/downloaded', cb);
};

/**
 * 下载更新包并自动安装, 下载过程中会发送Updater/downloading事件，下载完成时会发送Updater/downloaded事件
 * @param {string} url 更新地址
 * @returns {Promise.<void>}
 */
export const update = async (url) => {
  return Updater.update(url);
};

/**
 * 取消当前更新进程
 * @returns {Promise.<void>}
 */
export const cancel = async () => {
  return Updater.cancel();
};
