import { BannerSize } from './request/banner/BannerSize';
import type {
  BannerAdStateListener,
  InterstitialAdStateListener,
  NativeAdStateListener,
  RewardedAdStateListener,
} from './show/AdStateListener';
import { BannerPosition } from './show/banner/BannerPosition';
import { ShowCourierInstance } from './show';
import { RequestCourierInstance } from './request';
import { NativeAdDispatch } from './show/native/NativeAdDispatch';

export default class Tapsell {
  static setUserConsent(consent: boolean): Promise<void> {
    return RequestCourierInstance.setUserConsent(consent);
  }

  static requestRewardedAd(zoneId: string): Promise<string> {
    return RequestCourierInstance.requestRewardedAd(zoneId);
  }

  static requestInterstitialAd(zoneId: string): Promise<string> {
    return RequestCourierInstance.requestInterstitialAd(zoneId);
  }

  static requestBannerAd(
    zoneId: string,
    bannerSize: BannerSize
  ): Promise<string> {
    return RequestCourierInstance.requestBannerAd(zoneId, bannerSize);
  }

  static requestNativeAd(zoneId: string): Promise<string> {
    return RequestCourierInstance.requestNativeAd(zoneId);
  }

  static requestMultipleNativeAd(
    zoneId: string,
    maximumCount: number
  ): Promise<string> {
    return RequestCourierInstance.requestMultipleNativeAd(zoneId, maximumCount);
  }

  static showRewardedAd(adId: string, listener: RewardedAdStateListener) {
    ShowCourierInstance.showRewardedAd(adId, listener);
  }

  static showInterstitialAd(
    adId: string,
    listener: InterstitialAdStateListener
  ) {
    ShowCourierInstance.showInterstitialAd(adId, listener);
  }

  static showBannerAd(
    adId: string,
    bannerPosition: BannerPosition,
    listener: BannerAdStateListener
  ) {
    ShowCourierInstance.showBannerAd(adId, bannerPosition, listener);
  }

  static showNativeAd(
    adId: string,
    adDispatch: NativeAdDispatch,
    listener: NativeAdStateListener
  ) {
    ShowCourierInstance.showNativeAd(adId, adDispatch, listener);
  }

  static clickNativeAd(adId: string) {
    ShowCourierInstance.clickNativeAd(adId);
  }

  static destroyBannerAd(adId: string) {
    ShowCourierInstance.destroyBannerAd(adId);
  }

  static destroyNativeAd(adId: string) {
    ShowCourierInstance.destroyNativeAd(adId);
  }
}
