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

package com.google.common.flogger;

import com.google.common.flogger.parser.DefaultPrintfMessageParser;
import com.google.common.flogger.parser.MessageParser;
import java.util.logging.Level;
import com.google.common.flogger.backend.LoggerBackend;
import com.google.common.flogger.backend.Platform;
import com.google.errorprone.annotations.CheckReturnValue;

@CheckReturnValue
public final class FluentLogger extends AbstractLogger<Api>
{
    static final NoOp NO_OP;
    
    public static FluentLogger forEnclosingClass() {
        final String loggingClass = Platform.getCallerFinder().findLoggingClass(FluentLogger.class);
        return new FluentLogger(Platform.getBackend(loggingClass));
    }
    
    FluentLogger(final LoggerBackend backend) {
        super(backend);
    }
    
    @Override
    public Api at(final Level level) {
        final boolean isLoggable = this.isLoggable(level);
        final boolean isForced = Platform.shouldForceLogging(this.getName(), level, isLoggable);
        return (isLoggable || isForced) ? new Context(level, isForced) : FluentLogger.NO_OP;
    }
    
    static {
        NO_OP = new NoOp();
    }
    
    private static final class NoOp extends LoggingApi.NoOp<Api> implements Api
    {
    }
    
    final class Context extends LogContext<FluentLogger, Api> implements Api
    {
        private Context(final Level level, final boolean isForced) {
            super(level, isForced);
        }
        
        @Override
        protected FluentLogger getLogger() {
            return FluentLogger.this;
        }
        
        @Override
        protected Api api() {
            return this;
        }
        
        @Override
        protected Api noOp() {
            return FluentLogger.NO_OP;
        }
        
        @Override
        protected MessageParser getMessageParser() {
            return DefaultPrintfMessageParser.getInstance();
        }
    }
    
    public interface Api extends LoggingApi<Api>
    {
    }
}
