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

package io.sentry;

import io.sentry.protocol.SentryId;
import io.sentry.util.TracingUtils;
import io.sentry.util.Objects;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Nullable;
import io.sentry.protocol.TransactionNameSource;
import org.jetbrains.annotations.NotNull;

public final class TransactionContext extends SpanContext
{
    @NotNull
    public static final String DEFAULT_TRANSACTION_NAME = "<unlabeled transaction>";
    @NotNull
    private static final TransactionNameSource DEFAULT_NAME_SOURCE;
    @NotNull
    private static final String DEFAULT_OPERATION = "default";
    @NotNull
    private String name;
    @NotNull
    private TransactionNameSource transactionNameSource;
    @Nullable
    private TracesSamplingDecision parentSamplingDecision;
    private boolean isForNextAppStart;
    
    @ApiStatus.Internal
    public static TransactionContext fromPropagationContext(@NotNull final PropagationContext propagationContext) {
        final Boolean parentSampled = propagationContext.isSampled();
        final Baggage baggage = propagationContext.getBaggage();
        final Double sampleRate = baggage.getSampleRate();
        final TracesSamplingDecision samplingDecision = (parentSampled == null) ? null : new TracesSamplingDecision(parentSampled, sampleRate, propagationContext.getSampleRand());
        return new TransactionContext(propagationContext.getTraceId(), propagationContext.getSpanId(), propagationContext.getParentSpanId(), samplingDecision, baggage);
    }
    
    public TransactionContext(@NotNull final String name, @NotNull final String operation) {
        this(name, operation, null);
    }
    
    @ApiStatus.Internal
    public TransactionContext(@NotNull final String name, @NotNull final TransactionNameSource transactionNameSource, @NotNull final String operation) {
        this(name, transactionNameSource, operation, null);
    }
    
    public TransactionContext(@NotNull final String name, @NotNull final String operation, @Nullable final TracesSamplingDecision samplingDecision) {
        this(name, TransactionNameSource.CUSTOM, operation, samplingDecision);
    }
    
    @ApiStatus.Internal
    public TransactionContext(@NotNull final String name, @NotNull final TransactionNameSource transactionNameSource, @NotNull final String operation, @Nullable final TracesSamplingDecision samplingDecision) {
        super(operation);
        this.isForNextAppStart = false;
        this.name = Objects.requireNonNull(name, "name is required");
        this.transactionNameSource = transactionNameSource;
        this.setSamplingDecision(samplingDecision);
        this.baggage = TracingUtils.ensureBaggage(null, samplingDecision);
    }
    
    @ApiStatus.Internal
    public TransactionContext(@NotNull final SentryId traceId, @NotNull final SpanId spanId, @Nullable final SpanId parentSpanId, @Nullable final TracesSamplingDecision parentSamplingDecision, @Nullable final Baggage baggage) {
        super(traceId, spanId, "default", parentSpanId, null);
        this.isForNextAppStart = false;
        this.name = "<unlabeled transaction>";
        this.parentSamplingDecision = parentSamplingDecision;
        this.transactionNameSource = TransactionContext.DEFAULT_NAME_SOURCE;
        this.baggage = TracingUtils.ensureBaggage(baggage, parentSamplingDecision);
    }
    
    @NotNull
    public String getName() {
        return this.name;
    }
    
    @Nullable
    public Boolean getParentSampled() {
        if (this.parentSamplingDecision == null) {
            return null;
        }
        return this.parentSamplingDecision.getSampled();
    }
    
    @Nullable
    public TracesSamplingDecision getParentSamplingDecision() {
        return this.parentSamplingDecision;
    }
    
    public void setParentSampled(@Nullable final Boolean parentSampled) {
        if (parentSampled == null) {
            this.parentSamplingDecision = null;
        }
        else {
            this.parentSamplingDecision = new TracesSamplingDecision(parentSampled);
        }
    }
    
    public void setParentSampled(@Nullable final Boolean parentSampled, @Nullable final Boolean parentProfileSampled) {
        if (parentSampled == null) {
            this.parentSamplingDecision = null;
        }
        else if (parentProfileSampled == null) {
            this.parentSamplingDecision = new TracesSamplingDecision(parentSampled);
        }
        else {
            this.parentSamplingDecision = new TracesSamplingDecision(parentSampled, null, parentProfileSampled, null);
        }
    }
    
    @NotNull
    public TransactionNameSource getTransactionNameSource() {
        return this.transactionNameSource;
    }
    
    public void setName(@NotNull final String name) {
        this.name = Objects.requireNonNull(name, "name is required");
    }
    
    public void setTransactionNameSource(@NotNull final TransactionNameSource transactionNameSource) {
        this.transactionNameSource = transactionNameSource;
    }
    
    @ApiStatus.Internal
    public void setForNextAppStart(final boolean forNextAppStart) {
        this.isForNextAppStart = forNextAppStart;
    }
    
    public boolean isForNextAppStart() {
        return this.isForNextAppStart;
    }
    
    static {
        DEFAULT_NAME_SOURCE = TransactionNameSource.CUSTOM;
    }
}
