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

package io.sentry.util;

import io.sentry.TracesSamplingDecision;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.ApiStatus;

@ApiStatus.Internal
public final class SampleRateUtils
{
    public static boolean isValidSampleRate(@Nullable final Double sampleRate) {
        return isValidRate(sampleRate, true);
    }
    
    public static boolean isValidTracesSampleRate(@Nullable final Double tracesSampleRate) {
        return isValidTracesSampleRate(tracesSampleRate, true);
    }
    
    public static boolean isValidTracesSampleRate(@Nullable final Double tracesSampleRate, final boolean allowNull) {
        return isValidRate(tracesSampleRate, allowNull);
    }
    
    public static boolean isValidProfilesSampleRate(@Nullable final Double profilesSampleRate) {
        return isValidRate(profilesSampleRate, true);
    }
    
    public static boolean isValidContinuousProfilesSampleRate(@Nullable final Double profilesSampleRate) {
        return isValidRate(profilesSampleRate, true);
    }
    
    @NotNull
    public static Double backfilledSampleRand(@Nullable final Double sampleRand, @Nullable final Double sampleRate, @Nullable final Boolean sampled) {
        if (sampleRand != null) {
            return sampleRand;
        }
        final double newSampleRand = SentryRandom.current().nextDouble();
        if (sampleRate == null || sampled == null) {
            return newSampleRand;
        }
        if (sampled) {
            return newSampleRand * sampleRate;
        }
        return sampleRate + newSampleRand * (1.0 - sampleRate);
    }
    
    @NotNull
    public static TracesSamplingDecision backfilledSampleRand(@NotNull final TracesSamplingDecision samplingDecision) {
        if (samplingDecision.getSampleRand() != null) {
            return samplingDecision;
        }
        final Double sampleRand = backfilledSampleRand(null, samplingDecision.getSampleRate(), samplingDecision.getSampled());
        return new TracesSamplingDecision(samplingDecision.getSampled(), samplingDecision.getSampleRate(), sampleRand, samplingDecision.getProfileSampled(), samplingDecision.getProfileSampleRate());
    }
    
    private static boolean isValidRate(@Nullable final Double rate, final boolean allowNull) {
        if (rate == null) {
            return allowNull;
        }
        return !rate.isNaN() && rate >= 0.0 && rate <= 1.0;
    }
}
