/**
 * tslint:disable:max-classes-per-file
 *
 * @format
 */
import type { ImaSdk, google } from '@alugha/ima';
import { DelegatedEventTarget } from './delegated-event-target';
/**
 * Additional media events that help managing the
 * lifecycle of a media file playback.
 */
declare enum AdditionalMediaEvent {
    /** Fired when initial media file play happened. */
    MEDIA_START = "MediaStart",
    /** Fired when the first frame of the media file is played after linear preroll. */
    MEDIA_IMPRESSION = "MediaImpression",
    /** Fired when the media file playback finished after potential postroll. */
    MEDIA_STOP = "MediaStop",
    /** Fired when ad break cue points change. */
    MEDIA_CUE_POINTS_CHANGE = "MediaCuePointsChange",
    /**
     * Fired when media resumes playback. CONTENT_RESUME_REQUESTED
     * is sometimes triggered before playback and this event is only
     * triggered after ad is finished or when content resumes.
     */
    MEDIA_RESUMED = "MediaResumed"
}
/**
 * Adjusted enum of https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/reference/js/google.ima.AdEvent
 * to follow VPAID spec event names.
 */
declare enum ImaToAdEventMap {
    /**
     * Fired when an ad error occurred (standalone ad or ad within an ad rule).
     * IMA provides these events on different objects and this event normalizes it.
     */
    AD_ERROR = "AdError",
    /** Fired when the ad has stalled playback to buffer. */
    AD_BUFFERING = "AdBuffering",
    /** Fired when ad data is available. */
    LOADED = "AdLoaded",
    /** Fired when the impression URL has been pinged. */
    IMPRESSION = "AdImpression",
    /** Fired when the ad starts playing. */
    STARTED = "AdStarted",
    /** Fired when the ad playhead crosses first quartile. */
    FIRST_QUARTILE = "AdFirstQuartile",
    /** Fired when the ad playhead crosses midpoint. */
    MIDPOINT = "AdMidpoint",
    /** Fired when the ad playhead crosses third quartile. */
    THIRD_QUARTILE = "AdThirdQuartile",
    /** Fired when the ad's current time value changes. */
    AD_PROGRESS = "AdProgress",
    /** Fired when the ad completes playing. */
    COMPLETE = "AdComplete",
    /** Fired when the ad is clicked. */
    CLICK = "AdClick",
    /** Fired when the ad is paused. */
    PAUSED = "AdPaused",
    /** Fired when the ad is resumed. */
    RESUMED = "AdResumed",
    /** Fired when the ad is skipped by the user. */
    SKIPPED = "AdSkipped",
    /** Fired when the displayed ads skippable state is changed. */
    SKIPPABLE_STATE_CHANGED = "AdSkippableStateChanged",
    /** Fired when the ad volume has changed. */
    VOLUME_CHANGED = "AdVolumeChanged",
    /** Fired when the ad volume has been muted. */
    VOLUME_MUTED = "AdMuted",
    /** Fired when an ads list is loaded. This is when ad rule cuePoints are available. */
    AD_METADATA = "AdMetadata",
    /** Fired when an ad rule or a VMAP ad break would have played if autoPlayAdBreaks is false. */
    AD_BREAK_READY = "AdBreakReady",
    /** Fired when content should be paused. This usually happens right before an ad is about to cover the content. */
    CONTENT_PAUSE_REQUESTED = "AdContentPauseRequested",
    /** Fired when content should be resumed. This usually happens when an ad finishes or collapses. */
    CONTENT_RESUME_REQUESTED = "AdContentResumeRequested",
    /** Fired when the ads manager is done playing all the ads. */
    ALL_ADS_COMPLETED = "AdAllAdsCompleted",
    /** Fired when the ad's duration changes. */
    DURATION_CHANGE = "AdDurationChange",
    /** Fired when an ad triggers the interaction callback. Ad interactions contain an interaction ID string in the ad data. */
    INTERACTION = "AdInteraction",
    /** Fired when the displayed ad changes from linear to nonlinear, or vice versa. */
    LINEAR_CHANGED = "AdLinearChanged",
    /** Fired when a non-fatal error is encountered. The user need not take any action since the SDK will continue with the same or next ad playback depending on the error situation. */
    LOG = "AdLog",
    /** Fired when the ad is closed by the user. */
    USER_CLOSE = "AdUserClose",
    /** Not document by IMA */
    AD_CAN_PLAY = "AdCanPlay",
    /** Not document by IMA */
    EXPANDED_CHANGED = "AdExpandedChanged",
    /** Not document by IMA */
    VIEWABLE_IMPRESSION = "AdViewableImpression"
}
/**
 * Available events of the VAST-IMA-Player.
 *
 * Also see https://developers.google.com/interactive-media-ads/docs/sdks/html5/v3/reference/js/google.ima.AdEvent
 *
 * The player also triggers the normal media element events
 * (https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Media_events)
 * when the content playback happens. This is useful when
 * "disableCustomPlaybackForIOS10Plus = false" (default) is configured and
 * the same media element is used on iOS to render both ad and content.
 * Those event names are not enumerated here because they are known.
 */
export declare const PlayerEvent: {
    MEDIA_START: AdditionalMediaEvent.MEDIA_START;
    MEDIA_IMPRESSION: AdditionalMediaEvent.MEDIA_IMPRESSION;
    MEDIA_STOP: AdditionalMediaEvent.MEDIA_STOP;
    MEDIA_CUE_POINTS_CHANGE: AdditionalMediaEvent.MEDIA_CUE_POINTS_CHANGE;
    MEDIA_RESUMED: AdditionalMediaEvent.MEDIA_RESUMED;
    AD_ERROR: ImaToAdEventMap.AD_ERROR;
    AD_BUFFERING: ImaToAdEventMap.AD_BUFFERING;
    LOADED: ImaToAdEventMap.LOADED;
    IMPRESSION: ImaToAdEventMap.IMPRESSION;
    STARTED: ImaToAdEventMap.STARTED;
    FIRST_QUARTILE: ImaToAdEventMap.FIRST_QUARTILE;
    MIDPOINT: ImaToAdEventMap.MIDPOINT;
    THIRD_QUARTILE: ImaToAdEventMap.THIRD_QUARTILE;
    AD_PROGRESS: ImaToAdEventMap.AD_PROGRESS;
    COMPLETE: ImaToAdEventMap.COMPLETE;
    CLICK: ImaToAdEventMap.CLICK;
    PAUSED: ImaToAdEventMap.PAUSED;
    RESUMED: ImaToAdEventMap.RESUMED;
    SKIPPED: ImaToAdEventMap.SKIPPED;
    SKIPPABLE_STATE_CHANGED: ImaToAdEventMap.SKIPPABLE_STATE_CHANGED;
    VOLUME_CHANGED: ImaToAdEventMap.VOLUME_CHANGED;
    VOLUME_MUTED: ImaToAdEventMap.VOLUME_MUTED;
    AD_METADATA: ImaToAdEventMap.AD_METADATA;
    AD_BREAK_READY: ImaToAdEventMap.AD_BREAK_READY;
    CONTENT_PAUSE_REQUESTED: ImaToAdEventMap.CONTENT_PAUSE_REQUESTED;
    CONTENT_RESUME_REQUESTED: ImaToAdEventMap.CONTENT_RESUME_REQUESTED;
    ALL_ADS_COMPLETED: ImaToAdEventMap.ALL_ADS_COMPLETED;
    DURATION_CHANGE: ImaToAdEventMap.DURATION_CHANGE;
    INTERACTION: ImaToAdEventMap.INTERACTION;
    LINEAR_CHANGED: ImaToAdEventMap.LINEAR_CHANGED;
    LOG: ImaToAdEventMap.LOG;
    USER_CLOSE: ImaToAdEventMap.USER_CLOSE;
    AD_CAN_PLAY: ImaToAdEventMap.AD_CAN_PLAY;
    EXPANDED_CHANGED: ImaToAdEventMap.EXPANDED_CHANGED;
    VIEWABLE_IMPRESSION: ImaToAdEventMap.VIEWABLE_IMPRESSION;
};
export declare class PlayerOptions {
    /** Sets whether to disable custom playback on iOS 10+ browsers. If true, ads will play inline if the content video is inline. This enables TrueView skippable ads. However, the ad will stay inline and not support iOS's native fullscreen. */
    disableCustomPlaybackForIOS10Plus: boolean;
    /** Enables or disables auto resizing of adsManager. If enabled it also resizes non-linear ads. */
    autoResize: boolean;
    /** Allows to have a separate 'Learn More' click tracking element on mobile. */
    clickTrackingElement?: HTMLElement;
}
export declare class PlayerError extends Error {
    errorCode: number;
    innerError: Error;
    type: string;
    vastErrorCode: number;
    static ERROR_CODE_ADS_MANAGER_LOADED_TIMEOUT: number;
    static ERROR_CODE_REQUEST_ADS_TIMEOUT: number;
    constructor(...args: any[]);
}
declare type StartAd = {
    start: () => void;
    startWithoutReset: () => void;
    ad?: google.ima.Ad;
    adBreakTime?: number;
};
declare type StartAdCallback = (startAd: StartAd) => void;
/**
 * Convenience player wrapper for the Google IMA HTML5 SDK
 */
export declare class Player extends DelegatedEventTarget {
    #private;
    constructor(ima: ImaSdk, mediaElement: HTMLVideoElement, adElement: HTMLElement, adsRenderingSettings?: google.ima.AdsRenderingSettings, options?: PlayerOptions);
    /**
     * This allows synchronous activation of the media element
     * and the Google IMA ad-display-container. Useful when you
     * have to do async work before calling "playAds".
     */
    activate(): void;
    /**
     * This is the entry point to start ad playback. It can be used
     * as such:
     *
     * - With a single VAST at the beginning to play a preroll
     * - Anyhwere during content playback with a single VAST
     * - With a single VMAP at the beginning
     */
    playAds(adsRequest: google.ima.AdsRequest): void;
    /**
     * Similar to "playAds" method but with the difference
     * that it allows to first load the ad and start it separately
     * within the given callback.
     *
     * When a VAST or a VMAP ad break is given the callback is called
     * with a "start" method which either starts playing the individual
     * VAST ad or starts the VMAP ad break. If "start" method is not called
     * it won't play the ad.
     */
    loadAds(adsRequest: google.ima.AdsRequest, startAdCallback: StartAdCallback): void;
    private _mediaElementPlay;
    private _requestAds;
    private _setupIma;
    skipAd(): void;
    discardAdBreak(): void;
    /**
     * Starts playback of either content or ad element.
     */
    play(): void;
    /**
     * Pauses playback of either content or ad element.
     */
    pause(): void;
    /**
     * Sets volume of either content or ad element.
     */
    set volume(volume: number);
    /**
     * Returns volume of either content or ad element.
     */
    get volume(): number;
    /**
     * Sets muted state on either content or ad element.
     */
    set muted(muted: boolean);
    /**
     * Returns muted state of either content or ad element.
     */
    get muted(): boolean;
    /**
     * Sets current time of content element when not in ad playback mode.
     */
    set currentTime(currentTime: number);
    /**
     * Returns current playhead time of either content or ad element.
     */
    get currentTime(): number;
    /**
     * Returns current duration of either content or ad element.
     */
    get duration(): number;
    /**
     * Returns list of ad break cue points that weren't played yet.
     * Only available after "AdMetadata" event when VMAP is passed in playAds.
     */
    get cuePoints(): number[];
    private _setCuePoints;
    /**
     * Remove already played cuepoints
     *
     * @param timeOffset offset in seconds as defined in VMAP or 0 for preroll and -1 for postroll
     */
    private _adjustCuePoints;
    /**
     * Allows resizing the ad element. Useful when options.autoResize = false.
     */
    resizeAd(width: number, height: number): void;
    /**
     * Cleans up current ad and ad manager session or the complete IMA (via force).
     *
     * Externally call this function with "force = true" when you want to switch
     * the content source or move the player to another DOM node before doing
     * another "playAds" or "loadAds", so that it does a full cleanup.
     *
     * @param force - enforce a full cleanup
     * @returns a promise which resolves after all the cleanup work is done
     */
    reset(force?: boolean): void;
    private _resetIma;
    /**
     * Completely destroys this instance. It is unusable after that.
     */
    destroy(): void;
    isCustomPlaybackUsed(): boolean;
    private _resetAd;
    private _handleMediaElementEvents;
    private _handleAdsManagerEvents;
    private _onAdsLoaderError;
    private _onAdsManagerLoaded;
    private _startAdsManager;
    private _mediaStop;
    private _resizeObserverCallback;
    private _resizeAdsManager;
    private _getViewMode;
    private _playContent;
    private _createPlayerErrorFromImaErrorEvent;
    private _onAdError;
}
export {};
