/*
 * Copyright (C) 2012 Google Inc. All rights reserved.
 * Copyright (C) 2017 Apple Inc. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1.  Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 * 2.  Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in the
 *     documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

[
    Conditional=WEB_RTC,
    EnabledBySetting=PeerConnectionEnabled,
    ImplementationLacksVTable,
    Exposed=Window
] interface RTCStatsReport {
    readonly maplike<DOMString, object>;
};

enum RTCStatsType {
    "candidate-pair",
    "certificate",
    "codec",
    "data-channel",
    "inbound-rtp",
    "local-candidate",
    "media-source",
    "outbound-rtp",
    "peer-connection",
    "remote-candidate",
    "remote-inbound-rtp",
    "track",
    "transport"
};

typedef double DOMHighResTimeStamp;

dictionary RTCStats {
    DOMHighResTimeStamp timestamp;
    RTCStatsType type;
    DOMString id;

};

[ JSGenerateToJSObject ]
dictionary RTCRtpStreamStats : RTCStats {
    required unsigned long ssrc;
    required DOMString kind;
    // We should obsolete this field
    required DOMString mediaType;
    DOMString transportId;
    DOMString codecId;
};

[ JSGenerateToJSObject ]
dictionary RTCReceivedRtpStreamStats : RTCRtpStreamStats {
    unsigned long long packetsReceived;
    long long packetsLost;
    double jitter;
    unsigned long long packetsDiscarded;
    unsigned long long packetsRepaired;
    unsigned long long burstPacketsLost;
    unsigned long long burstPacketsDiscarded;
    unsigned long burstLossCount;
    unsigned long burstDiscardCount;
    double burstLossRate;
    double burstDiscardRate;
    double gapLossRate;
    double gapDiscardRate;
    unsigned long framesDropped;
    unsigned long partialFramesLost;
    unsigned long fullFramesLost;
};

[ JSGenerateToJSObject ]
dictionary RTCInboundRtpStreamStats : RTCReceivedRtpStreamStats {
    // required DOMString receiverId;
    DOMString remoteId;
    unsigned long framesDecoded;
    unsigned long keyFramesDecoded;
    unsigned long frameWidth;
    unsigned long frameHeight;
    unsigned long frameBitDepth;
    double framesPerSecond;
    unsigned long long qpSum;
    double totalDecodeTime;
    double totalInterFrameDelay;
    double totalSquaredInterFrameDelay;
    boolean voiceActivityFlag;
    DOMHighResTimeStamp lastPacketReceivedTimestamp;
    double averageRtcpInterval;
    unsigned long long headerBytesReceived;
    unsigned long long fecPacketsReceived;
    unsigned long long fecPacketsDiscarded;
    unsigned long long bytesReceived;
    unsigned long long packetsFailedDecryption;
    unsigned long long packetsDuplicated;
    // record<USVString, unsigned long long> perDscpPacketsReceived;
    unsigned long nackCount;
    unsigned long firCount;
    unsigned long pliCount;
    unsigned long sliCount;
    DOMHighResTimeStamp estimatedPlayoutTimestamp;
    double jitterBufferDelay;
    unsigned long long jitterBufferEmittedCount;
    unsigned long long totalSamplesReceived;
    unsigned long long samplesDecodedWithSilk;
    unsigned long long samplesDecodedWithCelt;
    unsigned long long concealedSamples;
    unsigned long long silentConcealedSamples;
    unsigned long long concealmentEvents;
    unsigned long long insertedSamplesForDeceleration;
    unsigned long long removedSamplesForAcceleration;
    double audioLevel;
    double totalAudioEnergy;
    double totalSamplesDuration;
    unsigned long framesReceived;
    // DOMString decoderImplementation;

    // To be removed as obsolete.
    DOMString trackId;
};

[ JSGenerateToJSObject ]
dictionary RTCRemoteInboundRtpStreamStats : RTCReceivedRtpStreamStats {
    DOMString localId;
    double roundTripTime;
    double totalRoundTripTime;
    double fractionLost;
    unsigned long long reportsReceived;
    unsigned long long roundTripTimeMeasurements;
};

[ JSGenerateToJSObject ]
dictionary RTCSentRtpStreamStats : RTCRtpStreamStats {
    unsigned long packetsSent;
    unsigned long long bytesSent;
};

[ JSGenerateToJSObject ]
dictionary RTCOutboundRtpStreamStats : RTCSentRtpStreamStats {
    unsigned long rtxSsrc;
    DOMString mediaSourceId;
    DOMString senderId;
    DOMString remoteId;
    DOMString rid;
    DOMHighResTimeStamp lastPacketSentTimestamp;
    unsigned long long headerBytesSent;
    unsigned long packetsDiscardedOnSend;
    unsigned long long bytesDiscardedOnSend;
    unsigned long fecPacketsSent;
    unsigned long long retransmittedPacketsSent;
    unsigned long long retransmittedBytesSent;
    double targetBitrate;
    unsigned long long totalEncodedBytesTarget;
    unsigned long frameWidth;
    unsigned long frameHeight;
    unsigned long frameBitDepth;
    double framesPerSecond;
    unsigned long framesSent;
    unsigned long hugeFramesSent;
    unsigned long framesEncoded;
    unsigned long keyFramesEncoded;
    unsigned long framesDiscardedOnSend;
    unsigned long long qpSum;
    unsigned long long totalSamplesSent;
    unsigned long long samplesEncodedWithSilk;
    unsigned long long samplesEncodedWithCelt;
    boolean voiceActivityFlag;
    double totalEncodeTime;
    double totalPacketSendDelay;
    double averageRtcpInterval;
    // RTCQualityLimitationReason qualityLimitationReason;
    // record<DOMString, double> qualityLimitationDurations;
    unsigned long qualityLimitationResolutionChanges;
    // record<USVString, unsigned long long> perDscpPacketsSent;
    unsigned long nackCount;
    unsigned long firCount;
    unsigned long pliCount;
    unsigned long sliCount;
    // DOMString encoderImplementation;

    // To be removed as obsolete.
    DOMString trackId;
};

[ JSGenerateToJSObject ]
dictionary RTCMediaStreamTrackStats : RTCStats {
    DOMString trackIdentifier;
    boolean remoteSource;
    boolean ended;
    boolean detached;
    // FIXME: Add sequence<DOMString> ssrcIds;
    unsigned long frameWidth;
    unsigned long frameHeight;
    double framesPerSecond;
    unsigned long framesSent;
    unsigned long framesReceived;
    unsigned long framesDecoded;
    unsigned long framesDropped;
    unsigned long framesCorrupted;
    unsigned long partialFramesLost;
    unsigned long fullFramesLost;
    double audioLevel;
    double echoReturnLoss;
    double echoReturnLossEnhancement;

    // FIXME: Introduce RTCVideoReceiverStats
    unsigned long freezeCount;
    unsigned long pauseCount;
    double totalFreezesDuration;
    double totalPausesDuration;
    double totalFramesDuration;
    double sumOfSquaredFramesDuration;
    // FIXME: Introduce RTCAudioReceiverStats
    unsigned long long jitterBufferFlushes;
};

[ JSGenerateToJSObject ]
dictionary RTCDataChannelStats : RTCStats {
    DOMString label;
    DOMString protocol;
    long datachannelid;
    // FIXME: Switch state to RTCDataChannelState
    DOMString state;
    unsigned long messagesSent;
    unsigned long long bytesSent;
    unsigned long messagesReceived;
    unsigned long long bytesReceived;
};

enum RTCStatsIceCandidatePairState {
    "frozen",
    "waiting",
    "inprogress",
    "failed",
    "succeeded",
    "cancelled"
};

[ JSGenerateToJSObject ]
dictionary RTCIceCandidatePairStats : RTCStats {
    DOMString transportId;
    DOMString localCandidateId;
    DOMString remoteCandidateId;
    RTCStatsIceCandidatePairState state;
    unsigned long long priority;
    boolean nominated;
    boolean writable;
    boolean readable;
    unsigned long long bytesSent;
    unsigned long long bytesReceived;
    double totalRoundTripTime;
    double currentRoundTripTime;
    double availableOutgoingBitrate;
    double availableIncomingBitrate;
    unsigned long long requestsReceived;
    unsigned long long requestsSent;
    unsigned long long responsesReceived;
    unsigned long long responsesSent;
    // FIXME: Expose other fields once libwebrtc support them.
};

[ JSGenerateToJSObject ]
dictionary RTCIceCandidateStats : RTCStats {
    DOMString transportId;
    // FIXME: decide whether to expose networkType
    // FIXME: Expose relayProtocol
    DOMString address;
    long port;
    DOMString protocol;
    RTCIceCandidateType candidateType;
    long priority;
    DOMString url;
    boolean deleted = false;
};

[ JSGenerateToJSObject ]
dictionary RTCCertificateStats : RTCStats {
    DOMString fingerprint;
    DOMString fingerprintAlgorithm;
    DOMString base64Certificate;
    DOMString issuerCertificateId;
};

enum RTCCodecType {
    "encode",
    "decode"
};

[ JSGenerateToJSObject ]
dictionary RTCCodecStats : RTCStats {
    unsigned long payloadType;
    RTCCodecType codecType;
    DOMString transportId;
    DOMString mimeType;
    unsigned long clockRate;
    unsigned long channels;
    DOMString sdpFmtpLine;
};

[ JSGenerateToJSObject ]
dictionary RTCTransportStats : RTCStats {
    // FIXME 169662: Support more fields.
    // unsigned long packetsSent;
    // unsigned long packetsReceived;
    unsigned long long bytesSent;
    unsigned long long bytesReceived;
    DOMString rtcpTransportStatsId;
    // RTCIceRole iceRole;
    // DOMString iceLocalUsernameFragment;
    required DOMString dtlsState;
    // RTCIceTransportState iceState;
    DOMString selectedCandidatePairId;
    DOMString localCertificateId;
    DOMString remoteCertificateId;
    DOMString tlsVersion;
    DOMString dtlsCipher;
    DOMString srtpCipher;
    // DOMString tlsGroup;
    // unsigned long selectedCandidatePairChanges;
};

[ JSGenerateToJSObject ]
dictionary RTCPeerConnectionStats : RTCStats {
    // FIXME 169662: Support more fields.
    unsigned long dataChannelsOpened;
    unsigned long dataChannelsClosed;
    // unsigned long dataChannelsRequested;
    // unsigned long dataChannelsAccepted;
};

[ JSGenerateToJSObject ]
dictionary RTCMediaSourceStats : RTCStats {
    required DOMString  trackIdentifier;
    required DOMString  kind;
    boolean relayedSource;
};

dictionary RTCAudioSourceStats : RTCMediaSourceStats {
    double audioLevel;
    double totalAudioEnergy;
    double totalSamplesDuration;
    double echoReturnLoss;
    double echoReturnLossEnhancement;
};

dictionary RTCVideoSourceStats : RTCMediaSourceStats {
    unsigned long width;
    unsigned long height;
    unsigned long bitDepth;
    unsigned long frames;
    double framesPerSecond;
};

// FIXME 169662: missing RTCMediaStreamStats
