package com.sonymusic.delphi.log4j;

import java.util.concurrent.ThreadFactory;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Supplier;

public class WorkerThreadFactory implements ThreadFactory {

    private Supplier<String> threadNamePrefix;
    private boolean daemon;

    private final AtomicInteger threadNumber = new AtomicInteger(1);
    private final ThreadGroup group;

    public WorkerThreadFactory(Supplier<String> threadNamePrefix) {
        this(threadNamePrefix, false);
    }

    public WorkerThreadFactory(Supplier<String> threadNamePrefix, boolean daemon) {
        SecurityManager securityManager = System.getSecurityManager();

        this.daemon = daemon;
        this.threadNamePrefix = threadNamePrefix;
        this.group = (securityManager != null)
                ? securityManager.getThreadGroup()
                : Thread.currentThread().getThreadGroup();
    }

    @Override
    public Thread newThread(Runnable runnable) {
        Thread thread = new Thread(group, runnable);
        thread.setName(threadNamePrefix.get() + "-" + threadNumber.getAndIncrement());
        thread.setDaemon(daemon);
        return thread;
    }
}
