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

export function setUserConsent(consent: boolean): Promise<void> {
  return RequestCourierInstance.setUserConsent(consent);
}

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

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

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

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

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

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

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

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

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

export function clickNativeAd(adId: string) {
  ShowCourierInstance.clickNativeAd(adId);
}

export function destroyBannerAd(adId: string) {
  ShowCourierInstance.destroyBannerAd(adId);
}

export function destroyNativeAd(adId: string) {
  ShowCourierInstance.destroyNativeAd(adId);
}

export { CompletionState, BannerSize, BannerPosition, NativeAdDispatch };
