import { HelpMenuGroup, MomentObservation, PeriodObservation } from './model';
import { Thumbnail } from '../timeline/thumbnail/thumbnail';
import { OmakaseChartCue } from './chart';
import { MarkerApi } from '../api';
import { OmakaseTextTrackCue, OmpAudioTrack, SubtitlesVttTrack } from './track';
import { Video, VideoLoadOptions } from '../video';
import { BufferedTimespan, OmpAudioRouterInputSoloMuteState, OmpAudioRouterState, OmpMainAudioInputSoloMuteState, OmpMainAudioState, OmpMediaElementState, OmpPeakProcessorDataMessage, OmpPeakProcessorDataPeaks, OmpSidecarAudioInputSoloMuteState, OmpSidecarAudioState, VideoSafeZone, VideoWindowPlaybackState } from '../video/model';
import { Events as HlsEvents } from 'hls.js';
export interface OmpEvent {
}
export interface OmpCancelableEvent {
    cancelableEvent: {
        cancelBubble: boolean;
    };
}
export interface OmpMouseEvent extends OmpEvent, OmpCancelableEvent {
    mouseEvent: MouseEvent;
}
export interface ClickEvent extends OmpMouseEvent {
}
export interface MouseEnterEvent extends OmpMouseEvent {
}
export interface MouseMoveEvent extends OmpMouseEvent {
}
export interface MouseLeaveEvent extends OmpMouseEvent {
}
export interface MouseOutEvent extends OmpMouseEvent {
}
export interface MouseOverEvent extends OmpMouseEvent {
}
export interface SyncTickEvent extends OmpEvent {
}
export interface VideoEvent extends OmpEvent {
}
export interface VideoLoadingEvent extends VideoEvent {
    sourceUrl: string;
    frameRate?: number;
    options?: VideoLoadOptions;
    isAttaching?: boolean;
    isDetaching?: boolean;
}
export interface VideoLoadedEvent extends VideoEvent {
    video: Video;
    videoLoadOptions?: VideoLoadOptions;
    isAttaching?: boolean;
    isDetaching?: boolean;
}
export interface VideoPlayEvent extends VideoEvent {
    /**
     * Current time
     */
    currentTime: number;
    /**
     * Current timecode
     */
    currentTimecode: string;
}
export interface VideoTimeChangeEvent extends VideoEvent {
    /**
     * Current time
     */
    currentTime: number;
    /**
     * Current frame
     */
    frame: number;
}
export interface VideoSeekingEvent extends VideoEvent {
    /**
     * Seek from time
     */
    fromTime: number;
    /**
     * Seek from timecode
     */
    fromTimecode: string;
    /**
     * Time to seek
     */
    toTime: number;
    /**
     * Seek to timecode
     */
    toTimecode: string;
}
export interface VideoSeekedEvent extends VideoEvent {
    /**
     * Current time
     */
    currentTime: number;
    /**
     * Current timecode
     */
    currentTimecode: string;
    /**
     * Previous time
     */
    previousTime: number;
    /**
     * Previous timecode
     */
    previousTimecode: string;
}
export interface VideoBufferingEvent extends VideoEvent {
    bufferedTimespans: BufferedTimespan[];
}
export interface VideoPlaybackRateEvent extends VideoEvent {
    /**
     * Playback rate
     */
    playbackRate: number;
}
export interface VideoDurationEvent extends VideoEvent {
    /**
     * Duration
     */
    duration: number;
}
export interface VideoEndedEvent extends VideoEvent {
}
export interface VideoHelpMenuChangeEvent extends VideoEvent {
    helpMenuGroups: HelpMenuGroup[];
}
export interface VideoFullscreenChangeEvent extends VideoEvent {
    fullscreen: boolean;
}
export interface VideoSafeZoneChangeEvent extends VideoEvent {
    videoSafeZones: VideoSafeZone[];
}
export interface VideoWindowPlaybackStateChangeEvent extends VideoEvent {
    videoWindowPlaybackState: VideoWindowPlaybackState;
}
export type VideoErrorType = 'VIDEO_LOAD_ERROR' | 'VIDEO_ERROR';
export interface VideoErrorEvent extends VideoEvent {
    type: VideoErrorType;
    message?: string;
}
export interface AudioEvent extends OmpEvent {
}
export interface VolumeChangeEvent extends AudioEvent {
    /**
     * Volume
     */
    volume: number;
    /**
     * Muted
     */
    muted: boolean;
    /**
     * Previous volume value
     */
    oldVolume: number;
}
export interface AudioLoadedEvent extends AudioEvent {
    /**
     * Audio tracks
     */
    audioTracks: OmpAudioTrack[];
    /**
     * Audio track
     */
    activeAudioTrack: OmpAudioTrack | undefined;
}
export interface AudioSwitchedEvent extends AudioEvent {
    /**
     * Audio track
     */
    activeAudioTrack: OmpAudioTrack;
}
export interface AudioUpdatedEvent extends AudioEvent {
    /**
     * Audio tracks
     */
    audioTracks: OmpAudioTrack[];
}
export interface MainAudioEvent extends AudioEvent {
}
export interface MainAudioChangeEvent extends MainAudioEvent {
    mainAudioState: OmpMainAudioState;
}
export interface OmpAudioRouterChangeEvent extends AudioEvent {
    audioRouterState: OmpAudioRouterState;
}
export interface AudioPeakProcessorMessageEvent extends AudioEvent {
    data: OmpPeakProcessorDataMessage | OmpPeakProcessorDataPeaks;
}
export interface OmpAudioRouterInputSoloMuteEvent extends AudioEvent {
    audioRouterInputSoloMuteState: OmpAudioRouterInputSoloMuteState;
}
export interface MainAudioInputSoloMuteEvent extends MainAudioEvent {
    mainAudioInputSoloMuteState: OmpMainAudioInputSoloMuteState;
}
export interface OmpMediaElementEvent {
    mediaElementState: OmpMediaElementState;
}
export interface OmpMediaElementLoadingEvent extends OmpMediaElementEvent {
}
export interface OmpMediaElementLoadedEvent extends OmpMediaElementEvent {
}
export interface OmpMediaElementErrorEvent extends OmpMediaElementEvent {
    error: any;
}
export interface SidecarAudioEvent extends AudioEvent {
    /**
     * Sidecar audio state
     */
    sidecarAudioState: OmpSidecarAudioState;
}
export interface SidecarAudioLoadingEvent extends SidecarAudioEvent {
}
export interface SidecarAudioLoadedEvent extends SidecarAudioEvent {
}
export interface SidecarAudioCreateEvent extends SidecarAudioEvent {
}
export interface SidecarAudioLoadedEvent extends SidecarAudioEvent {
}
export interface SidecarAudioRemoveEvent extends SidecarAudioEvent {
}
export interface SidecarAudioChangeEvent extends SidecarAudioEvent {
}
export interface SidecarAudioVolumeChangeEvent extends SidecarAudioEvent, VolumeChangeEvent {
}
export interface SidecarAudiosChangeEvent extends AudioEvent {
    /**
     * Sidecar audio states
     */
    sidecarAudioStates: OmpSidecarAudioState[];
}
export interface SidecarAudioVideoCurrentTimeBufferingEvent extends SidecarAudioEvent {
    /**
     * Is buffering video current time
     */
    buffering: boolean;
}
export interface SidecarAudioPeakProcessorMessageEvent extends AudioPeakProcessorMessageEvent {
    sidecarAudioTrackId: string;
}
export interface SidecarAudioInputSoloMuteEvent extends AudioEvent {
    /**
     * Changed sidecar audio input state
     */
    changedSidecarAudioInputSoloMuteState: OmpSidecarAudioInputSoloMuteState;
    /**
     * All available Sidecar audio input states
     */
    sidecarAudioInputSoloMuteStates: OmpSidecarAudioInputSoloMuteState[];
}
export interface SubtitlesEvent extends OmpEvent {
    tracks: SubtitlesVttTrack[];
    currentTrack: SubtitlesVttTrack | undefined;
}
export interface SubtitlesLoadedEvent extends SubtitlesEvent {
}
export interface SubtitlesCreateEvent extends SubtitlesEvent {
}
export interface SubtitlesChartEvent extends OmpEvent {
    cue?: OmakaseTextTrackCue;
}
export interface TimelineEvent extends OmpEvent {
}
export interface TimelineReadyEvent extends TimelineEvent {
}
export interface TimelineZoomEvent extends TimelineEvent {
    zoomPercent: number;
}
export interface TimelineScrollEvent extends TimelineEvent {
    scrollPercent: number;
}
export interface TimecodeClickEvent extends ClickEvent {
    timecode: string;
}
export interface TimecodeMouseMoveEvent extends MouseMoveEvent {
    timecode: string;
}
export interface ScrubberMoveEvent extends TimelineEvent {
    timecode: string;
    snapped: boolean;
}
export interface PlayheadMoveEvent extends TimelineEvent {
    timecode: string;
}
export interface ScrollbarEvent extends OmpEvent {
}
export interface ScrollbarScrollEvent extends ScrollbarEvent {
    scrollPercent: number;
}
export interface ScrollbarZoomEvent extends ScrollbarEvent {
    zoomPercent: number;
    zoomFocus: number;
}
export interface ThumbnailEvent extends OmpEvent {
    thumbnail: Thumbnail;
}
export interface MarkerEvent extends OmpEvent {
}
export interface MarkerChangeEvent extends MarkerEvent {
}
export interface MarkerMouseEvent extends MarkerEvent {
    marker: MarkerApi;
}
export interface MarkerFocusEvent extends MarkerEvent {
    marker: MarkerApi;
}
export interface MarkerCreateEvent extends MarkerEvent {
    marker: MarkerApi;
}
export interface MarkerDeleteEvent extends MarkerEvent {
    marker: MarkerApi;
}
export interface MarkerUpdateEvent extends MarkerEvent {
    marker: MarkerApi;
    oldValue: MarkerApi;
}
export interface MarkerSelectedEvent extends MarkerEvent {
    marker?: MarkerApi;
}
export interface MarkerInitEvent extends MarkerEvent {
    markers: MarkerApi[];
}
export interface MomentMarkerChangeEvent extends MarkerChangeEvent {
    timeObservation: MomentObservation;
    oldTimeObservation: MomentObservation;
}
export interface PeriodMarkerChangeEvent extends MarkerChangeEvent {
    timeObservation: PeriodObservation;
    oldTimeObservation: PeriodObservation;
}
export interface ChartEvent extends OmpEvent {
}
export interface ChartCueEvent extends ChartEvent {
    cue: OmakaseChartCue;
}
export interface MarkerListEvent extends OmpEvent {
}
export interface MarkerListClickEvent extends MarkerListEvent {
    marker: MarkerApi;
}
export interface MarkerListDeleteEvent extends MarkerListEvent {
    marker: MarkerApi;
}
export interface MarkerListUpdateEvent extends MarkerListEvent {
    marker: MarkerApi;
}
export interface MarkerListCreateEvent extends MarkerListEvent {
    marker: MarkerApi;
}
export interface MarkerListInitEvent extends MarkerListEvent {
    markers: MarkerApi[];
}
export interface MarkerListActionEvent extends MarkerListEvent {
    marker: MarkerApi;
    action: string;
}
export interface MarkerListSelectedEvent extends MarkerListEvent {
    marker?: MarkerApi;
}
export interface ThumnbailVttUrlChangedEvent extends VideoEvent {
    thumbnailVttUrl?: string;
}
export interface OmpNamedEvent extends OmpEvent {
    eventName: OmpNamedEventEventName;
}
export interface OmpNamedEvent extends OmpEvent {
    eventName: OmpNamedEventEventName;
}
export type OmpNamedEventEventName = 'hlsManifestParsed' | 'hlsMediaAttached' | 'hlsFragLoading' | 'hlsFragLoaded' | 'hlsError';
export interface OmpHlsNamedEvent extends OmpNamedEvent {
    hlsEventName: HlsEvents;
    data: any;
}
