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

package io.sentry.util;

import java.util.Iterator;
import io.sentry.FilterString;
import java.util.List;
import io.sentry.protocol.SentryId;
import io.sentry.IScopes;
import io.sentry.ISentryLifecycleToken;
import io.sentry.DateUtils;
import io.sentry.CheckIn;
import io.sentry.CheckInStatus;
import io.sentry.Sentry;
import java.util.concurrent.Callable;
import io.sentry.MonitorConfig;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.ApiStatus;

@ApiStatus.Experimental
public final class CheckInUtils
{
    public static <U> U withCheckIn(@NotNull final String monitorSlug, @Nullable final String environment, @Nullable final MonitorConfig monitorConfig, @NotNull final Callable<U> callable) throws Exception {
        final ISentryLifecycleToken ignored = Sentry.forkedScopes("CheckInUtils").makeCurrent();
        try {
            final IScopes scopes = Sentry.getCurrentScopes();
            final long startTime = System.currentTimeMillis();
            boolean didError = false;
            TracingUtils.startNewTrace(scopes);
            final CheckIn inProgressCheckIn = new CheckIn(monitorSlug, CheckInStatus.IN_PROGRESS);
            if (monitorConfig != null) {
                inProgressCheckIn.setMonitorConfig(monitorConfig);
            }
            if (environment != null) {
                inProgressCheckIn.setEnvironment(environment);
            }
            final SentryId checkInId = scopes.captureCheckIn(inProgressCheckIn);
            try {
                final U call = callable.call();
                final CheckInStatus status = didError ? CheckInStatus.ERROR : CheckInStatus.OK;
                final CheckIn checkIn = new CheckIn(checkInId, monitorSlug, status);
                if (environment != null) {
                    checkIn.setEnvironment(environment);
                }
                checkIn.setDuration(DateUtils.millisToSeconds((double)(System.currentTimeMillis() - startTime)));
                scopes.captureCheckIn(checkIn);
                if (ignored != null) {
                    ignored.close();
                }
                return call;
            }
            catch (final Throwable t) {
                didError = true;
                throw t;
            }
            finally {
                final CheckInStatus status2 = didError ? CheckInStatus.ERROR : CheckInStatus.OK;
                final CheckIn checkIn2 = new CheckIn(checkInId, monitorSlug, status2);
                if (environment != null) {
                    checkIn2.setEnvironment(environment);
                }
                checkIn2.setDuration(DateUtils.millisToSeconds((double)(System.currentTimeMillis() - startTime)));
                scopes.captureCheckIn(checkIn2);
            }
        }
        catch (final Throwable t2) {
            if (ignored != null) {
                try {
                    ignored.close();
                }
                catch (final Throwable exception) {
                    t2.addSuppressed(exception);
                }
            }
            throw t2;
        }
    }
    
    public static <U> U withCheckIn(@NotNull final String monitorSlug, @Nullable final MonitorConfig monitorConfig, @NotNull final Callable<U> callable) throws Exception {
        return withCheckIn(monitorSlug, null, monitorConfig, callable);
    }
    
    public static <U> U withCheckIn(@NotNull final String monitorSlug, @Nullable final String environment, @NotNull final Callable<U> callable) throws Exception {
        return withCheckIn(monitorSlug, environment, null, callable);
    }
    
    public static <U> U withCheckIn(@NotNull final String monitorSlug, @NotNull final Callable<U> callable) throws Exception {
        return withCheckIn(monitorSlug, null, null, callable);
    }
    
    @ApiStatus.Internal
    public static boolean isIgnored(@Nullable final List<FilterString> ignoredSlugs, @NotNull final String slug) {
        if (ignoredSlugs == null || ignoredSlugs.isEmpty()) {
            return false;
        }
        for (final FilterString ignoredSlug : ignoredSlugs) {
            if (ignoredSlug.getFilterString().equalsIgnoreCase(slug)) {
                return true;
            }
        }
        for (final FilterString ignoredSlug : ignoredSlugs) {
            try {
                if (ignoredSlug.matches(slug)) {
                    return true;
                }
                continue;
            }
            catch (final Throwable t) {}
        }
        return false;
    }
}
