import path from 'node:path';
import util from 'node:util';
import stackParser from 'error-stack-parser';
import * as winston from 'winston';
import 'winston-daily-rotate-file';

// import args from './args';

export default function initLogger(customLabel) {
	const filepath = stackParser.parse(new Error('stack'))[1]?.fileName;
	const contextLabel = customLabel || path.basename(filepath, '.js');

	return winston.createLogger({
		format: winston.format.combine(
			winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
			winston.format((info) => (info instanceof Error
				? { ...info, message: info.stack }
				: { ...info, message: typeof info.message === 'string' ? info.message : util.inspect(info.message) }))(),
			winston.format.colorize(),
			winston.format.printf(({
				level,
				timestamp,
				label,
				message,
			}) => `${timestamp} ${level} [${label || contextLabel}] ${message}`),
		),
		transports: [
			new winston.transports.Console({
				level: 'silly',
				timestamp: true,
			}),
			new winston.transports.DailyRotateFile({
				datePattern: 'YYYY-MM-DD',
				filename: path.join('log', '%DATE%.log'),
				level: 'silly',
			}),
		],
	});
}

export function initAccessLogger() {
	return winston.createLogger({
		level: 'access',
		levels: {
			access: 0,
		},
		format: winston.format.printf((data) => JSON.stringify({ ...data.message, timestamp: new Date() })),
		transports: [
			new winston.transports.DailyRotateFile({
				datePattern: 'YYYY-MM-DD',
				filename: path.join('log', 'access_%DATE%.log'),
				level: 'access',
			}),
		],
	});
}
