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

package io.sentry.hints;

import io.sentry.SentryLevel;
import java.util.concurrent.TimeUnit;
import org.jetbrains.annotations.NotNull;
import io.sentry.ILogger;
import java.util.concurrent.CountDownLatch;
import org.jetbrains.annotations.ApiStatus;

@ApiStatus.Internal
public abstract class BlockingFlushHint implements DiskFlushNotification, Flushable
{
    private final CountDownLatch latch;
    private final long flushTimeoutMillis;
    @NotNull
    private final ILogger logger;
    
    public BlockingFlushHint(final long flushTimeoutMillis, @NotNull final ILogger logger) {
        this.flushTimeoutMillis = flushTimeoutMillis;
        this.latch = new CountDownLatch(1);
        this.logger = logger;
    }
    
    @Override
    public boolean waitFlush() {
        try {
            return this.latch.await(this.flushTimeoutMillis, TimeUnit.MILLISECONDS);
        }
        catch (final InterruptedException e) {
            Thread.currentThread().interrupt();
            this.logger.log(SentryLevel.ERROR, "Exception while awaiting for flush in BlockingFlushHint", e);
            return false;
        }
    }
    
    @Override
    public void markFlushed() {
        this.latch.countDown();
    }
}
