// src/google-ima.d.ts
export {};

declare global {
	namespace google {
		namespace ima {
			class AdErrorEvent {
				static Type: {
					AD_ERROR: string;
				};
				getError(): any;
			}

			class AdEvent {
				static Type: {
					LOADED: string;
					STARTED: string;
					COMPLETE: string;
					// ...
				};
				getAd(): any;
				getAdData(): any;
			}

			class AdsManagerLoadedEvent {
				static Type: {
					ADS_MANAGER_LOADED: string;
				};
				getAdsManager(
					contentPlayback?: HTMLMediaElement | null,
					adsRenderingSettings?: object
				): AdsManager;
			}

			class AdDisplayContainer {
				constructor(adContainerElement: HTMLElement);
				initialize(): void;
				destroy(): void;
				getContentContainer(): HTMLElement;
			}

			class AdsLoader {
				constructor(adDisplayContainer: AdDisplayContainer);
				addEventListener<T>(eventType: string, listener: (event: T) => void): void;
				requestAds(adsRequest: AdsRequest): void;
				destroy(): void;
			}

			class AdsManager {
				init(width: number, height: number, viewMode: ViewMode): void;
				start(): void;
				setVolume(volume: number): void;
				getVolume(): number;
				pause(): void;
				resume(): void;
				skip(): void;
				getAdSkippableState(): boolean;
				destroy(): void;
				addEventListener<T>(eventType: string, listener: (event: T) => void): void;
			}

			class AdsRequest {
				adTagUrl?: string;
				linearAdSlotWidth?: number;
				linearAdSlotHeight?: number;
				nonLinearAdSlotWidth?: number;
				nonLinearAdSlotHeight?: number;
				setAdWillPlayMuted(muted: boolean): void;
			}

			class AdData {
				adBreakDuration: number;
				adPosition: number;
				currentTime: number;
				duration: number;
				totalAds: number;
			}

			enum ViewMode {
				NORMAL = "normal",
				FULLSCREEN = "fullscreen",
			}
		}
	}
}
