// Determine the environment
const isDevelopment = process.env.NODE_ENV === "development";

// Define logger interface
type Logger = {
    info: (msg: any, obj: any) => void;
    warn: (msg: any, obj: any) => void;
    error: (msg: any, obj: any) => void;
    debug: (msg: any, obj: any) => void;
};

let loggers: { [key: string]: Logger } = {}; // Store loggers by component name

// if (typeof window === "undefined") {
    const log4js = require("log4js");
    // Server-Side Logger Configuration
    log4js.configure({
        appenders: {
            console: { type: "console" }, // Log to console
            file: {
                type: "file",
                filename: "logs/app.log", // Main log file
                maxLogSize: 10485760, // 10 MB max size
                backups: 5, // Keep 5 backups
                compress: true, // Compress rotated files
            },
            dateFile: {
                type: "dateFile",
                filename: "logs/app-date.log", // Log file with date rotation
                pattern: "yyyy-MM-dd", // Rotate daily
                daysToKeep: 30, // Keep logs for 30 days
                compress: true, // Compress rotated files
            },
        },
        categories: {
            default: {
                appenders: isDevelopment ? ["console"] : ["file", "dateFile"], // Use appropriate appenders
                level: isDevelopment ? "debug" : "info", // Default log level
            },
        },
    });

/*    const serverLogger = log4js.getLogger("default");

    logger = {
        info: serverLogger.info.bind(serverLogger),
        warn: serverLogger.warn.bind(serverLogger),
        error: serverLogger.error.bind(serverLogger),
        debug: serverLogger.debug.bind(serverLogger),
    };*/

// Function to get or create a logger instance for a given component
const getLogger = (componentName: string): Logger => {
    if (!loggers[componentName]) {
        const serverLogger = log4js.getLogger(componentName); // Use componentName as category
        loggers[componentName] = {
            info: (msg, obj) => serverLogger.info(msg, obj),
            warn: (msg, obj) => serverLogger.warn(msg, obj),
            error: (msg, obj) => serverLogger.error(msg, obj),
            debug: (msg, obj) => serverLogger.debug(msg, obj),
        };
    }
    return loggers[componentName];
};

// Export the getLogger function instead of a single logger instance
export { getLogger };

/*} else {
    logger = {
        info: console.info,
        warn: console.warn,
        error: console.error,
        debug: console.debug,
    };
}

export { logger };*/
