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

package io.sentry;

import io.sentry.util.SampleRateUtils;
import io.sentry.util.Objects;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.ApiStatus;

@ApiStatus.Internal
public final class TracesSampler
{
    @NotNull
    private final SentryOptions options;
    
    public TracesSampler(@NotNull final SentryOptions options) {
        this.options = Objects.requireNonNull(options, "options are required");
    }
    
    @NotNull
    public TracesSamplingDecision sample(@NotNull final SamplingContext samplingContext) {
        final Double sampleRand = samplingContext.getSampleRand();
        final TracesSamplingDecision samplingContextSamplingDecision = samplingContext.getTransactionContext().getSamplingDecision();
        if (samplingContextSamplingDecision != null) {
            return SampleRateUtils.backfilledSampleRand(samplingContextSamplingDecision);
        }
        Double profilesSampleRate = null;
        if (this.options.getProfilesSampler() != null) {
            try {
                profilesSampleRate = this.options.getProfilesSampler().sample(samplingContext);
            }
            catch (final Throwable t) {
                this.options.getLogger().log(SentryLevel.ERROR, "Error in the 'ProfilesSamplerCallback' callback.", t);
            }
        }
        if (profilesSampleRate == null) {
            profilesSampleRate = this.options.getProfilesSampleRate();
        }
        final Boolean profilesSampled = profilesSampleRate != null && this.sample(profilesSampleRate, sampleRand);
        if (this.options.getTracesSampler() != null) {
            Double samplerResult = null;
            try {
                samplerResult = this.options.getTracesSampler().sample(samplingContext);
            }
            catch (final Throwable t2) {
                this.options.getLogger().log(SentryLevel.ERROR, "Error in the 'TracesSamplerCallback' callback.", t2);
            }
            if (samplerResult != null) {
                return new TracesSamplingDecision(this.sample(samplerResult, sampleRand), samplerResult, sampleRand, profilesSampled, profilesSampleRate);
            }
        }
        final TracesSamplingDecision parentSamplingDecision = samplingContext.getTransactionContext().getParentSamplingDecision();
        if (parentSamplingDecision != null) {
            return SampleRateUtils.backfilledSampleRand(parentSamplingDecision);
        }
        final Double tracesSampleRateFromOptions = this.options.getTracesSampleRate();
        final Double downsampleFactor = Math.pow(2.0, this.options.getBackpressureMonitor().getDownsampleFactor());
        final Double downsampledTracesSampleRate = (tracesSampleRateFromOptions == null) ? null : Double.valueOf(tracesSampleRateFromOptions / downsampleFactor);
        if (downsampledTracesSampleRate != null) {
            return new TracesSamplingDecision(this.sample(downsampledTracesSampleRate, sampleRand), downsampledTracesSampleRate, sampleRand, profilesSampled, profilesSampleRate);
        }
        return new TracesSamplingDecision(false, null, sampleRand, false, null);
    }
    
    public boolean sampleSessionProfile(final double sampleRand) {
        final Double sampling = this.options.getProfileSessionSampleRate();
        return sampling != null && this.sample(sampling, sampleRand);
    }
    
    private boolean sample(@NotNull final Double sampleRate, @NotNull final Double sampleRand) {
        return sampleRate >= sampleRand;
    }
}
