import { NativeModules, NativeEventEmitter } from 'react-native';
import type { BluestackPreference } from './Preference';

const { BluestackInterstitialAdManager } = NativeModules;
const eventEmitter = new NativeEventEmitter(
    NativeModules.BluestackInterstitialAdManager
);

export const BluestackInterstitial = {
    /**
     * Load interstitial ad for a given placementId and shows it if autoDisplay is true
     * @param placementId — The placement Id of the ad
     * @param autoDisplay — Enable / Disable auto display
     * @param bsPreference — Preferences for the ad to display
     */
    loadAd(
        placementId: string,
        autoDisplay: boolean = false,
        bsPreference?: BluestackPreference
    ) {
        // loadAd(placementId: string, autoDisplay: boolean, bsPreference: any) {
        let preferenceJSON: string = '{}';
        if (bsPreference != null) {
            preferenceJSON = bsPreference.getPreferenceJSON();
        }

        return BluestackInterstitialAdManager.loadAd(
            placementId,
            autoDisplay,
            preferenceJSON
        );
    },

    /**
     * Display an loaded interstitial ad
     */
    displayAd(): Promise<number> {
        return BluestackInterstitialAdManager.displayAd();
    },

    /**
     * Add interstitial ad event listener
     * @param listener — The listener function
     */
    addEventListener(listener: (event: any) => void) {
        eventEmitter.addListener('InterstitialAdEvent', listener);
    },

    /**
     * Remove all interstitial ad event listeners
     */
    removeAllEventListeners() {
        eventEmitter.removeAllListeners('InterstitialAdEvent');
    },
};
