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

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

export const BluestackRewardedAd = {
    /**
     * Load Rewarded ad for a given placementId and shows it if it is autoDisplay
     * @param placementId — The placement Id of the ad
     * @param bsPreference — Preferences for the ad to display
     */
    loadAd(placementId: string, bsPreference?: BluestackPreference) {
        let autoDisplay: boolean = false; // TODO - provide auto display option when native is ready.
        let preferenceJSON: string = '{}';
        if (bsPreference != null) {
            preferenceJSON = bsPreference.getPreferenceJSON();
        }

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

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

    /**
     * Add Rewarded ad Event Listener
     * @param listener — the listener function
     */
    addEventListener(listener: (event: any) => void) {
        eventEmitter.addListener('RewardedAdEvent', listener);
    },

    /**
     * Remove all Rewarded ad Event Listeners
     */
    removeAllEventListeners() {
        eventEmitter.removeAllListeners('RewardedAdEvent');
    },
};
