import { NativeModules } from "react-native";

interface PushBridgeInterface {
  registerTags: (tags: string[]) => Promise<void>;
  unregisterTags: (tags: string[]) => Promise<void>;
  getRegisteredTags: () => Promise<string[]>;
}

// eslint-disable-next-line prefer-promise-reject-errors
const nullPromise = () => Promise.resolve(["Push Notification bridge is null"]);

const defaultPushNotification = {
  registerTags: nullPromise,
  unregisterTags: nullPromise,
  getRegisteredTags: nullPromise,
};

const { PushBridge = defaultPushNotification } = NativeModules as {
  PushBridge: PushBridgeInterface;
};

export const pushBridge = {
  /**
   * Register push tags to push notification provider
   * @param  {String} tags Tags array to register
   */
  async registerTags(tags) {
    return PushBridge.registerTags(tags);
  },

  /**
   * Unregister push tags to push notification provider
   * @param  {String} tags Tags array to register
   */
  async unregisterTags(tags) {
    return PushBridge.unregisterTags(tags);
  },

  /**
   * Retrieve tags from push providers
   */
  async getRegisteredTags() {
    return PushBridge.getRegisteredTags();
  },
};
