/**
 * @module usePlayer
 */

import { Ref, MaybeRefOrGetter, MaybeRef, HTMLAttributes } from 'vue';
import { Player, PlayerOptions, PlayerEvents } from '../types/Player';
type PlayerAttributes = HTMLAttributes & Record<string, string>;
export interface UsePlayerParameters {
    /**
     * Freecaster player options
     * @default undefined
     */
    options?: MaybeRef<PlayerOptions | undefined>;
    /**
     * Wether the player is enabled
     * @default true
     */
    enabled?: MaybeRefOrGetter<boolean | undefined>;
    /**
     * Optional paused model that reads and controls the player state
     * @default undefined
     */
    paused?: Ref<boolean>;
    /**
     * Optional muted model that reads and controls the player state
     * @default undefined
     */
    muted?: Ref<boolean>;
    /**
     * Optional currentSubtitles model that reads and controls the player state
     * @default undefined
     */
    currentSubtitles?: Ref<TextTrack | undefined>;
    /**
     * Optional subtitles model that only reads the player state
     * @default undefined
     */
    subtitles?: Ref<TextTrack[]>;
    /**
     * Optional volume model that reads and controls the player state
     * @default undefined
     */
    volume?: Ref<number>;
    /**
     * Optional currentTime model that reads and controls the player state
     * @default undefined
     */
    currentTime?: Ref<number>;
    /**
     * Optional fullscreen model that reads and controls the player state
     * @default undefined
     */
    fullscreen?: Ref<boolean>;
    /**
     * Optional readyState model that only reads the player state
     * @default undefined
     */
    readyState?: Ref<number>;
    /**
     * Optional player model returned by the composable, fallbacks to an empty ref
     * @default undefined
     */
    player?: MaybeRef<Player | undefined>;
    /**
     * Optional container element ref returned by the composables, fallbacks to an
     * empty ref
     * @default undefined
     */
    element?: MaybeRef<HTMLElement | undefined>;
    /**
     * Default event listener, called for all events
     * @default undefined
     */
    emit?: <Type extends keyof PlayerEvents = keyof PlayerEvents>(type: Type, ...args: PlayerEvents[Type]) => void;
    /**
     * Event listeners
     * @default undefined
     */
    listeners?: {
        [Name in `on${Capitalize<keyof PlayerEvents>}`]?: (...args: PlayerEvents[Name extends `on${infer Event}` ? Uncapitalize<Event> : never]) => void;
    };
}
export interface UsePlayerContext extends UsePlayerParameters {
    listeners: Required<UsePlayerParameters>['listeners'];
    options: Ref<PlayerOptions | undefined>;
    enabled: Ref<boolean | undefined>;
    player: Ref<Player | undefined>;
    element: Ref<HTMLElement | undefined>;
    attributes: Ref<PlayerAttributes>;
    key: Ref<number>;
}
export declare function usePlayer(parameters?: UsePlayerParameters): UsePlayerContext;
export type { Player, PlayerOptions, PlayerEvents };
