import { Candidate, Setup, FingerPrint, AgoraAudioReceiverStats } from '@agora-js/shared';
import { RTPCapabilitiesWithDirection } from '@agora-js/protocol';

interface ICEParameters {
    iceUfrag: string;
    icePwd: string;
}
interface DtlsParameters {
    fingerprints: FingerPrint[];
}
declare enum Kind {
    VIDEO = "video",
    AUDIO = "audio"
}
type ConnectionParams = {
    iceParameters: ICEParameters;
    dtlsParameters: DtlsParameters;
    candidates: Candidate[];
    rtpCapabilities: RTPCapabilitiesWithDirection;
    setup: Setup;
    cname: string;
    preallocation?: boolean;
    preSSRCs?: PreSSRCMessage[];
};
type SSRCMessage = {
    ssrcId: number;
    rtx?: number;
}[];
type PreSSRCMessage = {
    kind: Kind;
    ssrcMsg: SSRCMessage;
    mslabel: string;
};

interface AiAudioModeExtension {
    receiveByRTCMedia(kind: Kind, ssrcMsg: SSRCMessage, cname: string | undefined): Promise<{
        track: MediaStreamTrack;
        id: string;
    }>;
    play(): void;
    stop(): void;
    stopReceiving(): void;
    onMute(): void;
    onUnmute(): void;
    close(): void;
    setRemoteRtpCapabilities(connectParams: ConnectionParams): void;
    getStats(): AgoraAudioReceiverStats;
    setAudioMetadataHandler(handler: ((metadata: Uint8Array) => void) | null): void;
    setAudioPtsHandler(handler: ((pts: bigint) => void) | null): void;
}
declare class AiAudioModeMedia implements AiAudioModeExtension {
    private _dc;
    static activeInstance: AiAudioModeMedia | null;
    private _neteq;
    private _pcmSource;
    private _outputTrack;
    private _dataChannel;
    private _remoteRtpCapabilities;
    private _initialized;
    private _receiving;
    private _boundSsrcId;
    private _mid;
    private _muted;
    private _muteTime;
    private _audioMetadataHandler;
    private _audioPtsHandler;
    constructor(_dc: RTCDataChannel);
    receiveByRTCMedia(kind: Kind, ssrcMsg: SSRCMessage, cname: string | undefined): Promise<{
        track: MediaStreamTrack;
        id: string;
    }>;
    play(): void;
    stop(): void;
    stopReceiving(): void;
    onMute(): void;
    onUnmute(): void;
    private _resume;
    close(): void;
    setRemoteRtpCapabilities(connectParams: ConnectionParams): void;
    getStats(): AgoraAudioReceiverStats;
    setAudioMetadataHandler(handler: ((metadata: Uint8Array) => void) | null): void;
    setAudioPtsHandler(handler: ((pts: bigint) => void) | null): void;
    private _init;
    private _onDcMessage;
    private _sendRtcp;
}

type TRteServiceName = "ChannelMediaRelay" | "LiveStreaming" | "ImageModeration" | "ContentInspect" | "DataStream" | "P2PChannel" | "PlanBConnection" | "InterceptFrame" | "DataChannelConnection" | "DataChannelSignal" | "AiAudioModeExtension";
interface IRteService<T = any, R = any> {
    name: TRteServiceName;
    create: (...args: any[]) => T;
    createSubmodule?: (...args: any[]) => R;
}

declare const AiAudioModeService: IRteService<AiAudioModeMedia>;

export { type AiAudioModeExtension, AiAudioModeService };
