/**
 * Dedicated file logger for CB AI Product Assistant widget create / remove.
 * Writes to logs/product-widget-YYYY-MM-DD.log and mirrors to console.
 */
import { createLogger, format, transports } from 'winston';
import path from 'path';
import fs from 'fs';

const logDir = path.join(process.cwd(), 'logs');
if (!fs.existsSync(logDir)) {
	fs.mkdirSync(logDir, { recursive: true });
}

const date = new Date().toISOString().split('T')[0];
export const productWidgetLogFile = path.join(logDir, `product-widget-${date}.log`);

const fileLogger = createLogger({
	level: 'info',
	format: format.combine(
		format.timestamp(),
		format.errors({ stack: true }),
		format.printf(({ timestamp, level, message, stack }) =>
			stack
				? `${timestamp} [${level.toUpperCase()}]: ${message}\nStack Trace:\n${stack}\n`
				: `${timestamp} [${level.toUpperCase()}]: ${message}`
		)
	),
	transports: [new transports.File({ filename: productWidgetLogFile })],
});

function serialize(meta?: unknown): string {
	if (meta === undefined) return '';
	try {
		return ` ${JSON.stringify(meta, null, 2)}`;
	} catch {
		return ` ${String(meta)}`;
	}
}

export const productWidgetLog = {
	info(message: string, meta?: unknown) {
		const line = `${message}${serialize(meta)}`;
		fileLogger.info(line);
		console.log(`[ProductWidget] ${message}`, meta !== undefined ? meta : '');
	},
	warn(message: string, meta?: unknown) {
		const line = `${message}${serialize(meta)}`;
		fileLogger.warn(line);
		console.warn(`[ProductWidget] ${message}`, meta !== undefined ? meta : '');
	},
	error(message: string, meta?: unknown) {
		const line = `${message}${serialize(meta)}`;
		fileLogger.error(line);
		console.error(`[ProductWidget] ${message}`, meta !== undefined ? meta : '');
	},
};
