/** Minimal structured logger — swap for pino/winston without touching call sites. */
import { env } from '../config/env.js';

type Level = 'debug' | 'info' | 'warn' | 'error';
const ORDER: Record<Level, number> = { debug: 10, info: 20, warn: 30, error: 40 };
const MIN = env.isProd ? ORDER.info : ORDER.debug;

function emit(level: Level, msg: string, meta?: unknown) {
  if (ORDER[level] < MIN) return;
  const line = { t: new Date().toISOString(), level, msg, ...(meta ? { meta } : {}) };
  const out = env.isProd ? JSON.stringify(line) : `${line.t} ${level.toUpperCase().padEnd(5)} ${msg}${meta ? ' ' + JSON.stringify(meta) : ''}`;
  (level === 'error' ? console.error : console.log)(out);
}

export const logger = {
  debug: (m: string, meta?: unknown) => emit('debug', m, meta),
  info: (m: string, meta?: unknown) => emit('info', m, meta),
  warn: (m: string, meta?: unknown) => emit('warn', m, meta),
  error: (m: string, meta?: unknown) => emit('error', m, meta),
};
