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

package com.hypixel.hytale.logger.backend;

import java.util.logging.LogRecord;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.Nonnull;
import java.util.logging.LogManager;

public class HytaleLogManager extends LogManager
{
    public static HytaleLogManager instance;
    
    public HytaleLogManager() {
        (HytaleLogManager.instance = this).getLogger("Hytale");
    }
    
    @Override
    public void reset() {
    }
    
    private void reset0() {
        super.reset();
    }
    
    @Nonnull
    @Override
    public Logger getLogger(@Nonnull final String name) {
        final Logger logger = super.getLogger(name);
        return (logger != null) ? logger : new HytaleJdkLogger(HytaleLoggerBackend.getLogger(name));
    }
    
    public static void resetFinally() {
        HytaleConsole.INSTANCE.shutdown();
        HytaleFileHandler.INSTANCE.shutdown();
        if (HytaleLogManager.instance != null) {
            HytaleLogManager.instance.reset0();
        }
    }
    
    private static class HytaleJdkLogger extends Logger
    {
        @Nonnull
        private final HytaleLoggerBackend backend;
        
        public HytaleJdkLogger(@Nonnull final HytaleLoggerBackend backend) {
            super(backend.getLoggerName(), null);
            this.backend = backend;
        }
        
        @Override
        public String getName() {
            return this.backend.getLoggerName();
        }
        
        @Nonnull
        @Override
        public Level getLevel() {
            return this.backend.getLevel();
        }
        
        @Override
        public boolean isLoggable(@Nonnull final Level level) {
            return this.backend.isLoggable(level);
        }
        
        @Override
        public void log(@Nonnull final LogRecord record) {
            this.backend.log(record);
        }
        
        @Override
        public void setLevel(@Nonnull final Level newLevel) {
            this.backend.setLevel(newLevel);
        }
    }
}
