/**
 * IMPORTANT:
 * 1. This file was auto generated by app.quicktype.io based on single config combination so you should expect issues
 * 2. All properties were marked originally as optional.
 * 3. Everyone are welcome to improve this file declarations by:
 *    - Adding Enums
 *    - Marking mandatory fields
 *    - Adding missing properties
 *    - Improving names of export interfaces
 */

declare namespace KalturaPlayerTypes {
  export interface PlayerConfig {
    log?: Log;
    sources: Sources;
    plugins: Record<string, Record<string, any>>;
    playback: Playback;
    abr?: ABR;
    drm?: DRM;
    network?: Network;
    advertising?: Advertising;
    disableUserCache?: boolean;
    provider: Provider;
    targetId?: string;
    ui?: UI;
    session: Session;
  }

  export enum EntryTypes {
    Vod = 'Vod',
    Live = 'Live'
  }

  export interface ABR {
    enabled?: boolean;
    fpsDroppedFramesInterval?: number;
    fpsDroppedMonitoringThreshold?: number;
    capLevelOnFPSDrop?: boolean;
    capLevelToPlayerSize?: boolean;
    defaultBandwidthEstimate?: number;
    restrictions?: Restrictions;
  }

  export interface Restrictions {
    minBitrate?: number;
    maxBitrate?: null;
  }

  export interface Advertising {
    adBreaks?: any[];
  }

  export interface DRM {
    keySystem?: string;
  }

  export interface Log {
    level?: string;
  }

  export interface Network {}

  export interface Playback {
    audioLanguage?: string;
    textLanguage?: string;
    useNativeTextTrack?: boolean;
    enableCEA708Captions?: boolean;
    captionsTextTrack1Label?: string;
    captionsTextTrack1LanguageCode?: string;
    captionsTextTrack2Label?: string;
    captionsTextTrack2LanguageCode?: string;
    volume?: number;
    startTime?: number;
    playsinline?: boolean;
    preload?: string;
    autoplay?: boolean;
    loop?: boolean;
    allowMutedAutoPlay?: boolean;
    muted?: boolean;
    pictureInPicture?: boolean;
    options?: Options;
    preferNative?: PreferNative;
    inBrowserFullscreen?: boolean;
    playAdsWithMSE?: boolean;
    streamPriority?: StreamPriority[];
  }

  export interface Options {
    html5?: Html5;
  }

  export interface Html5 {
    hls?: Network;
    dash?: Network;
    native?: Network;
  }

  export interface PreferNative {
    hls?: boolean;
    dash?: boolean;
  }

  export interface StreamPriority {
    engine?: string;
    format?: string;
  }

  export interface Provider {
    env: Env;
    partnerId?: string;
    uiConfId?: string;
    ks: string;
    log?: Log;
  }

  export interface Env {
    serviceUrl: string;
    cdnUrl?: string;
    statsServiceUrl?: string;
    liveStatsServiceUrl?: string;
    analyticsServiceUrl?: string;
    apiFeatures?: APIFeatures;
    browser: Browser;
    os: OS;
  }
  export interface Browser {
    name: string;
    version: string;
  }
  export interface OS {
    name: string;
    version: string;
    major: string;
  }
  export interface APIFeatures {
    entryRedirect?: string;
  }

  export interface Session {
    isAnonymous?: boolean;
    partnerId?: string;
    uiConfId?: string;
    ks?: string;
    id?: string;
  }

  export interface Sources {
    options?: Network;
    hls?: Dash[];
    dash?: Dash[];
    progressive?: Progressive[];
    id: string;
    duration?: number;
    type: EntryTypes;
    poster?: string;
    dvr?: boolean;
    vr?: null;
    metadata?: Metadata;
    captions?: KalturaCaptionSource[];
    downloadUrl?: string;
  }

  export interface Dash {
    id?: string;
    url?: string;
    mimetype?: string;
  }

  export interface Metadata {
    name?: string;
    description?: string;
    tags?: string;
  }

  export interface KalturaCaptionSource {
    default: boolean;
    label: string;
    language: string;
    type: string;
    url: string;
  }

  export interface Progressive {
    id?: string;
    url?: string;
    mimetype?: string;
    bandwidth?: number;
    width?: number;
    height?: number;
    label?: string;
  }

  export interface UI {
    stargetId?: string;
    debug?: boolean;
    log?: Log;
  }

  export interface MediaInfo {
    entryId?: string;
    referenceId?: string;
    ks?: string;
  }

  export interface OVPMediaInfo extends MediaInfo {}

  export interface OTTMediaInfo extends MediaInfo {
    mediaType: string;
    contextType: string;
    protocol?: string;
    fileIds?: string;
    streamerType?: string;
    urlType?: string;
    adapterData?: any;
    assetReferenceType?: string;
    formats?: Array<string>;
  }
}
