import chalk from 'chalk'; export enum LogLevel { INFO = 'INFO', WARN = 'WARN', ERROR = 'ERROR', DEBUG = 'DEBUG' } export class Logger { private static formatMessage(level: LogLevel, message: string, context?: unknown): string { const timestamp = new Date().toISOString(); let prefix = ''; switch (level) { case LogLevel.INFO: prefix = chalk.blue(`[${LogLevel.INFO}]`); break; case LogLevel.WARN: prefix = chalk.yellow(`[${LogLevel.WARN}]`); break; case LogLevel.ERROR: prefix = chalk.red(`[${LogLevel.ERROR}]`); break; case LogLevel.DEBUG: prefix = chalk.gray(`[${LogLevel.DEBUG}]`); break; } let output = `${chalk.gray(timestamp)} ${prefix} ${message}`; if (context) { if (context instanceof Error) { output += `\n${chalk.red(context.stack || context.message)}`; } else if (typeof context === 'object') { try { output += `\n${chalk.gray(JSON.stringify(context, null, 2))}`; } catch (e) { output += `\n${chalk.gray('[Circular or invalid object]')}`; } } else { output += ` ${String(context)}`; } } return output; } static info(message: string, context?: unknown) { console.log(this.formatMessage(LogLevel.INFO, message, context)); } static warn(message: string, context?: unknown) { console.warn(this.formatMessage(LogLevel.WARN, message, context)); } static error(message: string, error?: unknown) { console.error(this.formatMessage(LogLevel.ERROR, message, error)); } static debug(message: string, context?: unknown) { if (process.env.DEBUG || process.env.RIGSTATE_DEBUG) { console.debug(this.formatMessage(LogLevel.DEBUG, message, context)); } } } // dummy