import { Observable, Subject } from 'rxjs';
import * as i0 from '@angular/core';
import { EnvironmentProviders } from '@angular/core';
import { TellyMediaFactory, TellyMedia, TellyPluginConfig, TellyPlugin, TellyMediaOptions } from '@ngx-telly/player/core';

declare class TellyEventsService {
    timer$: Observable<number>;
    activity$: Observable<Event>;
    destroy$: Subject<void>;
    reconfigure$: Subject<void>;
    hide$: Subject<boolean>;
    click$: Subject<void>;
    static ɵfac: i0.ɵɵFactoryDeclaration<TellyEventsService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<TellyEventsService>;
}

declare class TellyMediaService {
    staticFactories: TellyMediaFactory[];
    dynamicFactories: Map<string, TellyMediaFactory>;
    medias: Map<string, TellyMedia>;
    register(media: TellyMedia): void;
    deregister(id: string): void;
    get<T extends TellyMedia = TellyMedia>(id: string): T | undefined;
    exists(id: string): boolean;
    registerFactory(name: string, factory?: TellyMediaFactory): void;
    deregisterFactory(name: string): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<TellyMediaService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<TellyMediaService>;
}

declare class TellyDurationCapperService {
    events: TellyEventsService;
    cap?: number;
    set(cap: number, media: TellyMedia): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<TellyDurationCapperService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<TellyDurationCapperService>;
}

declare class TellyPluginOrchestratorService {
    private readonly plugins;
    private readonly config;
    private readonly tellyMedia;
    registerMediaFactory(): void;
    private canRegisterMediaFactory;
    private normalizePlugins;
    static ɵfac: i0.ɵɵFactoryDeclaration<TellyPluginOrchestratorService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<TellyPluginOrchestratorService>;
}

declare class TellyFullscreenService {
    fullscreen: i0.WritableSignal<boolean>;
    enter(): void;
    exit(): void;
    toggle(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<TellyFullscreenService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<TellyFullscreenService>;
}

declare function pluginFactory(plugin: new (config: Partial<TellyPluginConfig>) => TellyPlugin, config: Partial<TellyPluginConfig>): TellyPlugin;
declare function provideTellyPlayer(config?: Partial<TellyMediaOptions>): EnvironmentProviders;
declare function provideTellyPlugin<T extends TellyPlugin>(plugin: T, config?: Partial<TellyPluginConfig>): EnvironmentProviders;

export { TellyDurationCapperService, TellyEventsService, TellyFullscreenService, TellyMediaService, TellyPluginOrchestratorService, pluginFactory, provideTellyPlayer, provideTellyPlugin };
