// @ts-nocheck
import { Observable } from "rxjs";
import { RecorderData, RecorderRequestQuery, GetRecordingDataResponse, GetRecordingsResponse, DeleteRecordingsResponse } from "../data/recorder-annotation.data.model";
import { RecorderEventTypesMap } from "../data/recorder-events.data.model";
import { RecordedData, RecorderQualityConstraints, RecorderEncodingOptions } from "../data/recorder.model";

export declare class RecorderElement {

    initRecording: (type: string, panelId?: string) => any;

    /**
     * @deprecated Use on('recordingDone') method instead
     */
    onRecordedData: () => Observable<RecordedData | null>;

    /**
     * To enable recording countdown
     */
    enableRecordingCountdown: () => void;

    /**
     * To disable recording countdown
     */
    disableRecordingCountdown: () => void;

    /**
     * To get recording data by recorder id
     * @deprecated Use getRecordingData() method instead
     */
    getRecordingDataByRecorderId: (recorderId: string) => Observable<RecorderData | null>;

    /**
     * To enable recording transcription
     */
    enableRecordingTranscription: () => void;

    /**
     * To disable recording transcription
     */
    disableRecordingTranscription: () => void;

    /**
     * Subscribe to recorder actions
     */
    public on: <T extends keyof RecorderEventTypesMap>(action: T) => Observable<RecorderEventTypesMap[T]>;

    /**
     * @deprecated Use fetchRecordings() method instead
     */
    getRecordingData: (query: RecorderRequestQuery) => Promise<GetRecordingDataResponse>;

    /**
     * To enable video editor
     */
    enableVideoEditor: () => void;

    /**
     * To disable video editor
     */
    disableVideoEditor: () => void;

    /**
     * To get recordings
     */
    getRecordings: (query?: RecorderRequestQuery) => Observable<GetRecordingsResponse[]>;

    /**
     * To fetch recordings
     */
    fetchRecordings: (query?: RecorderRequestQuery) => Promise<GetRecordingsResponse[]>;

    /**
     * To delete recordings
     */
    deleteRecordings: (query?: RecorderRequestQuery) => Promise<DeleteRecordingsResponse[]>;

    /**
     * To set recording quality constraints
     */
    setRecordingQualityConstraints: (constraints: RecorderQualityConstraints) => void;

    /**
     * To set recording encoding options
     */
    setRecordingEncodingOptions: (options: RecorderEncodingOptions) => void;

    /**
     * To download latest video
     */
    downloadLatestVideo: (recorderId: string) => Promise<boolean>;

    constructor();

    private _initRecording;

    /**
     * @deprecated Use on('recordingDone') method instead
     */
    private _onRecordedData;

    /**
     * To enable dark mode in comments
     */
    private _enableRecordingCountdown;

    /**
     * To disable dark mode in comments
     */
    private _disableRecordingCountdown;

    /**
     * To get recording data by recorder id
     * @deprecated Use getRecordingData() method instead
     */
    private _getRecordingDataByRecorderId;

    /**
     * To enable recording transcription
     */
    private _enableRecordingTranscription;

    /**
     * To disable recording transcription
     */
    private _disableRecordingTranscription;

    /**
     * Subscribe to recorder actions
     */
    private _on;

    /**
     * To get recording data by recorder ids
     */
    private _getRecordingData;

    /**
     * To enable video editor
     */
    private _enableVideoEditor;

    /**
     * To disable video editor
     */
    private _disableVideoEditor;

    /**
     * To get recordings
     */
    private _getRecordings;

    /**
     * To fetch recordings
     */
    private _fetchRecordings;

    /**
     * To delete recordings
     */
    private _deleteRecordings;

    /**
     * To set recording quality constraints
     */
    private _setRecordingQualityConstraints;

    /**
     * To set recording encoding options
     */
    private _setRecordingEncodingOptions;

    /**
     * To download latest video
     */
    private _downloadLatestVideo;
}