// 
// Decompiled by Procyon v0.6.0
// 

package io.sentry.rrweb;

import java.util.concurrent.ConcurrentHashMap;
import java.util.HashMap;
import io.sentry.vendor.gson.stream.JsonToken;
import io.sentry.ObjectReader;
import io.sentry.JsonDeserializer;
import java.io.IOException;
import java.util.Iterator;
import io.sentry.ILogger;
import io.sentry.ObjectWriter;
import io.sentry.util.Objects;
import org.jetbrains.annotations.Nullable;
import java.util.Map;
import org.jetbrains.annotations.NotNull;
import io.sentry.JsonSerializable;
import io.sentry.JsonUnknown;

public final class RRWebVideoEvent extends RRWebEvent implements JsonUnknown, JsonSerializable
{
    public static final String EVENT_TAG = "video";
    public static final String REPLAY_ENCODING = "h264";
    public static final String REPLAY_CONTAINER = "mp4";
    public static final String REPLAY_FRAME_RATE_TYPE_CONSTANT = "constant";
    public static final String REPLAY_FRAME_RATE_TYPE_VARIABLE = "variable";
    @NotNull
    private String tag;
    private int segmentId;
    private long size;
    private long durationMs;
    @NotNull
    private String encoding;
    @NotNull
    private String container;
    private int height;
    private int width;
    private int frameCount;
    @NotNull
    private String frameRateType;
    private int frameRate;
    private int left;
    private int top;
    @Nullable
    private Map<String, Object> unknown;
    @Nullable
    private Map<String, Object> payloadUnknown;
    @Nullable
    private Map<String, Object> dataUnknown;
    
    public RRWebVideoEvent() {
        super(RRWebEventType.Custom);
        this.encoding = "h264";
        this.container = "mp4";
        this.frameRateType = "constant";
        this.tag = "video";
    }
    
    @NotNull
    public String getTag() {
        return this.tag;
    }
    
    public void setTag(@NotNull final String tag) {
        this.tag = tag;
    }
    
    public int getSegmentId() {
        return this.segmentId;
    }
    
    public void setSegmentId(final int segmentId) {
        this.segmentId = segmentId;
    }
    
    public long getSize() {
        return this.size;
    }
    
    public void setSize(final long size) {
        this.size = size;
    }
    
    public long getDurationMs() {
        return this.durationMs;
    }
    
    public void setDurationMs(final long durationMs) {
        this.durationMs = durationMs;
    }
    
    @NotNull
    public String getEncoding() {
        return this.encoding;
    }
    
    public void setEncoding(@NotNull final String encoding) {
        this.encoding = encoding;
    }
    
    @NotNull
    public String getContainer() {
        return this.container;
    }
    
    public void setContainer(@NotNull final String container) {
        this.container = container;
    }
    
    public int getHeight() {
        return this.height;
    }
    
    public void setHeight(final int height) {
        this.height = height;
    }
    
    public int getWidth() {
        return this.width;
    }
    
    public void setWidth(final int width) {
        this.width = width;
    }
    
    public int getFrameCount() {
        return this.frameCount;
    }
    
    public void setFrameCount(final int frameCount) {
        this.frameCount = frameCount;
    }
    
    @NotNull
    public String getFrameRateType() {
        return this.frameRateType;
    }
    
    public void setFrameRateType(@NotNull final String frameRateType) {
        this.frameRateType = frameRateType;
    }
    
    public int getFrameRate() {
        return this.frameRate;
    }
    
    public void setFrameRate(final int frameRate) {
        this.frameRate = frameRate;
    }
    
    public int getLeft() {
        return this.left;
    }
    
    public void setLeft(final int left) {
        this.left = left;
    }
    
    public int getTop() {
        return this.top;
    }
    
    public void setTop(final int top) {
        this.top = top;
    }
    
    @Nullable
    public Map<String, Object> getPayloadUnknown() {
        return this.payloadUnknown;
    }
    
    public void setPayloadUnknown(@Nullable final Map<String, Object> payloadUnknown) {
        this.payloadUnknown = payloadUnknown;
    }
    
    @Nullable
    public Map<String, Object> getDataUnknown() {
        return this.dataUnknown;
    }
    
    public void setDataUnknown(@Nullable final Map<String, Object> dataUnknown) {
        this.dataUnknown = dataUnknown;
    }
    
    @Nullable
    @Override
    public Map<String, Object> getUnknown() {
        return this.unknown;
    }
    
    @Override
    public void setUnknown(@Nullable final Map<String, Object> unknown) {
        this.unknown = unknown;
    }
    
    @Override
    public boolean equals(final Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || this.getClass() != o.getClass()) {
            return false;
        }
        if (!super.equals(o)) {
            return false;
        }
        final RRWebVideoEvent that = (RRWebVideoEvent)o;
        return this.segmentId == that.segmentId && this.size == that.size && this.durationMs == that.durationMs && this.height == that.height && this.width == that.width && this.frameCount == that.frameCount && this.frameRate == that.frameRate && this.left == that.left && this.top == that.top && Objects.equals(this.tag, that.tag) && Objects.equals(this.encoding, that.encoding) && Objects.equals(this.container, that.container) && Objects.equals(this.frameRateType, that.frameRateType);
    }
    
    @Override
    public int hashCode() {
        return Objects.hash(super.hashCode(), this.tag, this.segmentId, this.size, this.durationMs, this.encoding, this.container, this.height, this.width, this.frameCount, this.frameRateType, this.frameRate, this.left, this.top);
    }
    
    @Override
    public void serialize(@NotNull final ObjectWriter writer, @NotNull final ILogger logger) throws IOException {
        writer.beginObject();
        new Serializer().serialize(this, writer, logger);
        writer.name("data");
        this.serializeData(writer, logger);
        if (this.unknown != null) {
            for (final String key : this.unknown.keySet()) {
                final Object value = this.unknown.get(key);
                writer.name(key);
                writer.value(logger, value);
            }
        }
        writer.endObject();
    }
    
    private void serializeData(@NotNull final ObjectWriter writer, @NotNull final ILogger logger) throws IOException {
        writer.beginObject();
        writer.name("tag").value(this.tag);
        writer.name("payload");
        this.serializePayload(writer, logger);
        if (this.dataUnknown != null) {
            for (final String key : this.dataUnknown.keySet()) {
                final Object value = this.dataUnknown.get(key);
                writer.name(key);
                writer.value(logger, value);
            }
        }
        writer.endObject();
    }
    
    private void serializePayload(@NotNull final ObjectWriter writer, @NotNull final ILogger logger) throws IOException {
        writer.beginObject();
        writer.name("segmentId").value(this.segmentId);
        writer.name("size").value(this.size);
        writer.name("duration").value(this.durationMs);
        writer.name("encoding").value(this.encoding);
        writer.name("container").value(this.container);
        writer.name("height").value(this.height);
        writer.name("width").value(this.width);
        writer.name("frameCount").value(this.frameCount);
        writer.name("frameRate").value(this.frameRate);
        writer.name("frameRateType").value(this.frameRateType);
        writer.name("left").value(this.left);
        writer.name("top").value(this.top);
        if (this.payloadUnknown != null) {
            for (final String key : this.payloadUnknown.keySet()) {
                final Object value = this.payloadUnknown.get(key);
                writer.name(key);
                writer.value(logger, value);
            }
        }
        writer.endObject();
    }
    
    public static final class JsonKeys
    {
        public static final String DATA = "data";
        public static final String PAYLOAD = "payload";
        public static final String SEGMENT_ID = "segmentId";
        public static final String SIZE = "size";
        public static final String DURATION = "duration";
        public static final String ENCODING = "encoding";
        public static final String CONTAINER = "container";
        public static final String HEIGHT = "height";
        public static final String WIDTH = "width";
        public static final String FRAME_COUNT = "frameCount";
        public static final String FRAME_RATE_TYPE = "frameRateType";
        public static final String FRAME_RATE = "frameRate";
        public static final String LEFT = "left";
        public static final String TOP = "top";
    }
    
    public static final class Deserializer implements JsonDeserializer<RRWebVideoEvent>
    {
        @NotNull
        @Override
        public RRWebVideoEvent deserialize(@NotNull final ObjectReader reader, @NotNull final ILogger logger) throws Exception {
            reader.beginObject();
            Map<String, Object> unknown = null;
            final RRWebVideoEvent event = new RRWebVideoEvent();
            final RRWebEvent.Deserializer baseEventDeserializer = new RRWebEvent.Deserializer();
            while (reader.peek() == JsonToken.NAME) {
                final String nextName2;
                final String nextName = nextName2 = reader.nextName();
                switch (nextName2) {
                    case "data": {
                        this.deserializeData(event, reader, logger);
                        continue;
                    }
                    default: {
                        if (!baseEventDeserializer.deserializeValue(event, nextName, reader, logger)) {
                            if (unknown == null) {
                                unknown = new HashMap<String, Object>();
                            }
                            reader.nextUnknown(logger, unknown, nextName);
                            continue;
                        }
                        continue;
                    }
                }
            }
            event.setUnknown(unknown);
            reader.endObject();
            return event;
        }
        
        private void deserializeData(@NotNull final RRWebVideoEvent event, @NotNull final ObjectReader reader, @NotNull final ILogger logger) throws Exception {
            Map<String, Object> dataUnknown = null;
            reader.beginObject();
            while (reader.peek() == JsonToken.NAME) {
                final String nextName2;
                final String nextName = nextName2 = reader.nextName();
                switch (nextName2) {
                    case "tag": {
                        final String tag = reader.nextStringOrNull();
                        event.tag = ((tag == null) ? "" : tag);
                        continue;
                    }
                    case "payload": {
                        this.deserializePayload(event, reader, logger);
                        continue;
                    }
                    default: {
                        if (dataUnknown == null) {
                            dataUnknown = new ConcurrentHashMap<String, Object>();
                        }
                        reader.nextUnknown(logger, dataUnknown, nextName);
                        continue;
                    }
                }
            }
            event.setDataUnknown(dataUnknown);
            reader.endObject();
        }
        
        private void deserializePayload(@NotNull final RRWebVideoEvent event, @NotNull final ObjectReader reader, @NotNull final ILogger logger) throws Exception {
            Map<String, Object> payloadUnknown = null;
            reader.beginObject();
            while (reader.peek() == JsonToken.NAME) {
                final String nextName2;
                final String nextName = nextName2 = reader.nextName();
                switch (nextName2) {
                    case "segmentId": {
                        event.segmentId = reader.nextInt();
                        continue;
                    }
                    case "size": {
                        final Long size = reader.nextLongOrNull();
                        event.size = ((size == null) ? 0L : size);
                        continue;
                    }
                    case "duration": {
                        event.durationMs = reader.nextLong();
                        continue;
                    }
                    case "container": {
                        final String container = reader.nextStringOrNull();
                        event.container = ((container == null) ? "" : container);
                        continue;
                    }
                    case "encoding": {
                        final String encoding = reader.nextStringOrNull();
                        event.encoding = ((encoding == null) ? "" : encoding);
                        continue;
                    }
                    case "height": {
                        final Integer height = reader.nextIntegerOrNull();
                        event.height = ((height == null) ? 0 : height);
                        continue;
                    }
                    case "width": {
                        final Integer width = reader.nextIntegerOrNull();
                        event.width = ((width == null) ? 0 : width);
                        continue;
                    }
                    case "frameCount": {
                        final Integer frameCount = reader.nextIntegerOrNull();
                        event.frameCount = ((frameCount == null) ? 0 : frameCount);
                        continue;
                    }
                    case "frameRate": {
                        final Integer frameRate = reader.nextIntegerOrNull();
                        event.frameRate = ((frameRate == null) ? 0 : frameRate);
                        continue;
                    }
                    case "frameRateType": {
                        final String frameRateType = reader.nextStringOrNull();
                        event.frameRateType = ((frameRateType == null) ? "" : frameRateType);
                        continue;
                    }
                    case "left": {
                        final Integer left = reader.nextIntegerOrNull();
                        event.left = ((left == null) ? 0 : left);
                        continue;
                    }
                    case "top": {
                        final Integer top = reader.nextIntegerOrNull();
                        event.top = ((top == null) ? 0 : top);
                        continue;
                    }
                    default: {
                        if (payloadUnknown == null) {
                            payloadUnknown = new ConcurrentHashMap<String, Object>();
                        }
                        reader.nextUnknown(logger, payloadUnknown, nextName);
                        continue;
                    }
                }
            }
            event.setPayloadUnknown(payloadUnknown);
            reader.endObject();
        }
    }
}
