import { ClientMonitor } from "./ClientMonitor";
import { CertificateMonitor } from "./monitors/CertificateMonitor";
import { CodecMonitor } from "./monitors/CodecMonitor";
import { DataChannelMonitor } from "./monitors/DataChannelMonitor";
import { IceCandidateMonitor } from "./monitors/IceCandidateMonitor";
import { IceCandidatePairMonitor } from "./monitors/IceCandidatePairMonitor";
import { IceTransportMonitor } from "./monitors/IceTransportMonitor";
import { InboundRtpMonitor } from "./monitors/InboundRtpMonitor";
import { InboundTrackMonitor } from "./monitors/InboundTrackMonitor";
import { MediaPlayoutMonitor } from "./monitors/MediaPlayoutMonitor";
import { MediaSourceMonitor } from "./monitors/MediaSourceMonitor";
import { OutboundRtpMonitor } from "./monitors/OutboundRtpMonitor";
import { OutboundTrackMonitor } from "./monitors/OutboundTrackMonitor";
import { PeerConnectionMonitor } from "./monitors/PeerConnectionMonitor";
import { PeerConnectionTransportMonitor } from "./monitors/PeerConnectionTransportMonitor";
import { RemoteInboundRtpMonitor } from "./monitors/RemoteInboundRtpMonitor";
import { RemoteOutboundRtpMonitor } from "./monitors/RemoteOutboundRtpMonitor";
import { ClientSample } from "./schema/ClientSample";
import { RtcStats } from "./schema/W3cStatsIdentifiers";
export type ClientIssue = {
    type: string;
    payload?: Record<string, unknown> | boolean | string | number;
    timestamp: number;
};
export type ClientEvent = {
    type: string;
    payload?: Record<string, unknown> | boolean | string | number;
    timestamp: number;
};
export type ClientMetaData = {
    type: string;
    payload?: Record<string, unknown> | boolean | string | number;
    timestamp: number;
};
export type ExtensionStat = {
    type: string;
    payload?: Record<string, unknown> | boolean | string | number;
};
export type ClientMonitorBaseEvent = {
    clientMonitor: ClientMonitor;
};
export type SampleCreatedEventPayload = ClientMonitorBaseEvent & {
    sample: ClientSample;
};
export type StatsCollectedEventPayload = ClientMonitorBaseEvent & {
    startedAt: number;
    durationOfCollectingStatsInMs: number;
    collectedStats: [string, RtcStats[]][];
};
export type CongestionEventPayload = ClientMonitorBaseEvent & {
    peerConnectionMonitor: PeerConnectionMonitor;
    availableIncomingBitrate: number;
    availableOutgoingBitrate: number;
    maxAvailableIncomingBitrate: number;
    maxAvailableOutgoingBitrate: number;
    maxReceivingBitrate: number;
    maxSendingBitrate: number;
};
export type AudioDesyncTrackEventPayload = ClientMonitorBaseEvent & {
    trackMonitor: InboundTrackMonitor;
};
export type SynthesizedAudioEventPayload = ClientMonitorBaseEvent & {
    mediaPlayoutMonitor: MediaPlayoutMonitor;
};
export type FreezedVideoTrackEventPayload = ClientMonitorBaseEvent & {
    trackMonitor: InboundTrackMonitor;
};
export type DryInboundTrackEventPayload = ClientMonitorBaseEvent & {
    trackMonitor: InboundTrackMonitor;
};
export type DryOutboundTrackEventPayload = ClientMonitorBaseEvent & {
    trackMonitor: OutboundTrackMonitor;
};
export type TooLongPcConnectionEstablishmentEventPayload = ClientMonitorBaseEvent & {
    peerConnectionMonitor: PeerConnectionMonitor;
};
export type IceTupleChangedEventPayload = ClientMonitorBaseEvent & {
    peerConnectionMonitor: PeerConnectionMonitor;
};
export type InboundVideoPlayoutDiscrepancyEventPayload = ClientMonitorBaseEvent & {
    trackMonitor: InboundTrackMonitor;
};
export type ScoreEventPayload = ClientMonitorBaseEvent & {
    clientScore: number;
    currentReasons: Record<string, number>;
};
export type NewCodecMonitorEventPayload = ClientMonitorBaseEvent & {
    codecMonitor: CodecMonitor;
};
export type NewPeerConnectionMonitorEventPayload = ClientMonitorBaseEvent & {
    peerConnectionMonitor: PeerConnectionMonitor;
};
export type NewInboundRtpMonitorEventPayload = ClientMonitorBaseEvent & {
    inboundRtpMonitor: InboundRtpMonitor;
};
export type NewInboundTrackMonitorEventPayload = ClientMonitorBaseEvent & {
    inboundTrackMonitor: InboundTrackMonitor;
};
export type NewOutboundTrackMonitorEventPayload = ClientMonitorBaseEvent & {
    outboundTrackMonitor: OutboundTrackMonitor;
};
export type NewOutboundRtpMonitorEventPayload = ClientMonitorBaseEvent & {
    outboundRtpMonitor: OutboundRtpMonitor;
};
export type NewDataChannelMonitorEventPayload = ClientMonitorBaseEvent & {
    dataChannelMonitor: DataChannelMonitor;
};
export type NewIceCandidateMonitorPayload = ClientMonitorBaseEvent & {
    iceCandidateMonitor: IceCandidateMonitor;
};
export type NewIceCandidatePairMonitorEventPayload = ClientMonitorBaseEvent & {
    iceCandidatePairMonitor: IceCandidatePairMonitor;
};
export type NewIceTransportMonitorEventPayload = ClientMonitorBaseEvent & {
    iceTransportMonitor: IceTransportMonitor;
};
export type NewMediaPlayoutMonitorEventPayload = ClientMonitorBaseEvent & {
    mediaPlayoutMonitor: MediaPlayoutMonitor;
};
export type NewMediaSourceMonitorEventPayload = ClientMonitorBaseEvent & {
    mediaSourceMonitor: MediaSourceMonitor;
};
export type NewPeerConnectionTransportMonitorEventPayload = ClientMonitorBaseEvent & {
    peerConnectionTransportMonitor: PeerConnectionTransportMonitor;
};
export type NewRemoteInboundRtpMonitorEventPayload = ClientMonitorBaseEvent & {
    remoteInboundRtpMonitor: RemoteInboundRtpMonitor;
};
export type NewRemoteOutboundRtpMonitorEventPayload = ClientMonitorBaseEvent & {
    remoteOutboundRtpMonitor: RemoteOutboundRtpMonitor;
};
export type NewCertificateMonitorEventPayload = ClientMonitorBaseEvent & {
    certificateMonitor: CertificateMonitor;
};
export type ClientMonitorEvents = {
    'sample-created': [SampleCreatedEventPayload];
    "stats-collected": [StatsCollectedEventPayload];
    'close': [];
    'issue': [ClientIssue];
    'client-event': [ClientEvent];
    'meta': [ClientMetaData];
    'extension-stats': [ExtensionStat];
    'congestion': [CongestionEventPayload];
    'cpulimitation': [ClientMonitorBaseEvent];
    'audio-desync-track': [AudioDesyncTrackEventPayload];
    'synthesized-audio': [SynthesizedAudioEventPayload];
    'freezed-video-track': [FreezedVideoTrackEventPayload];
    'dry-inbound-track': [DryInboundTrackEventPayload];
    'dry-outbound-track': [DryOutboundTrackEventPayload];
    'ice-tuple-changed': [IceTupleChangedEventPayload];
    'too-long-pc-connection-establishment': [TooLongPcConnectionEstablishmentEventPayload];
    'inbound-video-playout-discrepancy': [InboundVideoPlayoutDiscrepancyEventPayload];
    'score': [ScoreEventPayload];
    'new-codec-monitor': [NewCodecMonitorEventPayload];
    'new-peerconnnection-monitor': [NewPeerConnectionMonitorEventPayload];
    'new-inbound-rtp-monitor': [NewInboundRtpMonitorEventPayload];
    'new-inbound-track-monitor': [NewInboundTrackMonitorEventPayload];
    'new-outbound-track-monitor': [NewOutboundTrackMonitorEventPayload];
    'new-outbound-rtp-monitor': [NewOutboundRtpMonitorEventPayload];
    'new-data-channel-monitor': [NewDataChannelMonitorEventPayload];
    'new-ice-transport-monitor': [NewIceTransportMonitorEventPayload];
    'new-ice-candidate-monitor': [NewIceCandidateMonitorPayload];
    'new-ice-candidate-pair-monitor': [NewIceCandidatePairMonitorEventPayload];
    'new-media-playout-monitor': [NewMediaPlayoutMonitorEventPayload];
    'new-media-source-monitor': [NewMediaSourceMonitorEventPayload];
    'new-peer-connection-transport-monitor': [NewPeerConnectionTransportMonitorEventPayload];
    'new-remote-inbound-rtp-monitor': [NewRemoteInboundRtpMonitorEventPayload];
    'new-remote-outbound-rtp-monitor': [NewRemoteOutboundRtpMonitorEventPayload];
    'new-certificate-monitor': [NewCertificateMonitorEventPayload];
};
