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

package io.sentry;

import io.sentry.exception.SentryEnvelopeException;
import java.io.IOException;
import java.util.List;
import java.util.ArrayList;
import io.sentry.protocol.SdkVersion;
import org.jetbrains.annotations.Nullable;
import io.sentry.protocol.SentryId;
import io.sentry.util.Objects;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;

public final class SentryEnvelope
{
    @NotNull
    private final SentryEnvelopeHeader header;
    @NotNull
    private final Iterable<SentryEnvelopeItem> items;
    
    @ApiStatus.Internal
    @NotNull
    public Iterable<SentryEnvelopeItem> getItems() {
        return this.items;
    }
    
    @ApiStatus.Internal
    @NotNull
    public SentryEnvelopeHeader getHeader() {
        return this.header;
    }
    
    @ApiStatus.Internal
    public SentryEnvelope(@NotNull final SentryEnvelopeHeader header, @NotNull final Iterable<SentryEnvelopeItem> items) {
        this.header = Objects.requireNonNull(header, "SentryEnvelopeHeader is required.");
        this.items = Objects.requireNonNull(items, "SentryEnvelope items are required.");
    }
    
    @ApiStatus.Internal
    public SentryEnvelope(@Nullable final SentryId eventId, @Nullable final SdkVersion sdkVersion, @NotNull final Iterable<SentryEnvelopeItem> items) {
        this.header = new SentryEnvelopeHeader(eventId, sdkVersion);
        this.items = Objects.requireNonNull(items, "SentryEnvelope items are required.");
    }
    
    @ApiStatus.Internal
    public SentryEnvelope(@Nullable final SentryId eventId, @Nullable final SdkVersion sdkVersion, @NotNull final SentryEnvelopeItem item) {
        Objects.requireNonNull(item, "SentryEnvelopeItem is required.");
        this.header = new SentryEnvelopeHeader(eventId, sdkVersion);
        final List<SentryEnvelopeItem> items = new ArrayList<SentryEnvelopeItem>(1);
        items.add(item);
        this.items = items;
    }
    
    @ApiStatus.Internal
    @NotNull
    public static SentryEnvelope from(@NotNull final ISerializer serializer, @NotNull final Session session, @Nullable final SdkVersion sdkVersion) throws IOException {
        Objects.requireNonNull(serializer, "Serializer is required.");
        Objects.requireNonNull(session, "session is required.");
        return new SentryEnvelope(null, sdkVersion, SentryEnvelopeItem.fromSession(serializer, session));
    }
    
    @ApiStatus.Internal
    @NotNull
    public static SentryEnvelope from(@NotNull final ISerializer serializer, @NotNull final SentryBaseEvent event, @Nullable final SdkVersion sdkVersion) throws IOException {
        Objects.requireNonNull(serializer, "Serializer is required.");
        Objects.requireNonNull(event, "item is required.");
        return new SentryEnvelope(event.getEventId(), sdkVersion, SentryEnvelopeItem.fromEvent(serializer, event));
    }
    
    @ApiStatus.Internal
    @NotNull
    public static SentryEnvelope from(@NotNull final ISerializer serializer, @NotNull final ProfilingTraceData profilingTraceData, final long maxTraceFileSize, @Nullable final SdkVersion sdkVersion) throws SentryEnvelopeException {
        Objects.requireNonNull(serializer, "Serializer is required.");
        Objects.requireNonNull(profilingTraceData, "Profiling trace data is required.");
        return new SentryEnvelope(new SentryId(profilingTraceData.getProfileId()), sdkVersion, SentryEnvelopeItem.fromProfilingTrace(profilingTraceData, maxTraceFileSize, serializer));
    }
}
