package com.kingston.jforgame.server.logs;

import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.rolling.RollingFileAppender;
import org.apache.log4j.rolling.TimeBasedRollingPolicy;

import java.util.HashMap;
import java.util.Map;

public class LoggerBuilder {

    private static final Map<String, Logger> container = new HashMap<>();

    private static final String LOG_PATH = "log/";

    public static Logger getLogger(String name) {
        Logger logger = container.get(name);
        if (logger != null) {
            return logger;
        }
        synchronized (LoggerBuilder.class) {
            logger = container.get(name);
            if (logger != null) {
                return logger;
            }
            logger = build(name);
            container.put(name, logger);
        }
        return logger;
    }

    public static void main(String[] args) {
        LoggerFunction.ACTIVITY.getLogger().error("hello game");
    }

    private static Logger build(String name) {
        Logger logger = Logger.getLogger(name);
        logger.removeAllAppenders();
        logger.setLevel(Level.INFO);
        logger.setAdditivity(false);

        RollingFileAppender appender = new RollingFileAppender();
        PatternLayout layout = new PatternLayout();
        String conversionPatten = "[%d] %p %t %c - %m%n";
        layout.setConversionPattern(conversionPatten);
        appender.setLayout(layout);
        appender.setEncoding("utf-8");
        appender.setAppend(true);

        TimeBasedRollingPolicy policy = new TimeBasedRollingPolicy();
        String fp = LoggerBuilder.LOG_PATH + name + "/" + name + ".log.%d{yyyy-MM-dd}";
        policy.setFileNamePattern(fp);
        appender.setRollingPolicy(policy);

        appender.activateOptions();
        logger.addAppender(appender);

        container.put(name,logger);
        return logger;
    }

}