const fs = require('fs');
const path = require('path');
const pino = require('pino');

const LOG_FILE = path.join(__dirname, '..', 'compress.log');

const logger = pino({
  level: process.env.LOG_LEVEL || 'info',
  transport: process.env.NODE_ENV !== 'production' ? {
    target: 'pino/file',
    options: { destination: 1 },
  } : undefined,
});

const MAX_LOG_BYTES = 5 * 1024 * 1024; // rotate at 5MB, keep one previous file

function logToFile(text) {
  const ts = new Date().toISOString();
  const line = `[${ts}] ${text}\n`;
  fs.stat(LOG_FILE, (statErr, st) => {
    if (!statErr && st.size > MAX_LOG_BYTES) {
      try { fs.renameSync(LOG_FILE, LOG_FILE + '.1'); } catch {}
    }
    fs.appendFile(LOG_FILE, line, (err) => {
      if (err) logger.warn({ error: err.message }, 'logToFile failed');
    });
  });
}

module.exports = {
  info: (msg, meta) => meta ? logger.info(meta, msg) : logger.info(msg),
  warn: (msg, meta) => meta ? logger.warn(meta, msg) : logger.warn(msg),
  error: (msg, meta) => meta ? logger.error(meta, msg) : logger.error(msg),
  debug: (msg, meta) => meta ? logger.debug(meta, msg) : logger.debug(msg),
  logToFile,
  logger,
};
