/**
 * Shared debug utility for EverMem hooks
 *
 * Usage:
 *   import { debug, setDebugPrefix } from './utils/debug.js';
 *   setDebugPrefix('inject');  // Optional: add prefix to log lines
 *   debug('hookInput:', data);
 *
 * Enable by setting EVERMEM_DEBUG=1 in .env file or environment
 * Logs are written to /tmp/evermem-debug.log
 */

import { appendFileSync } from 'fs';
import { isConfigured } from './config.js';  // This loads .env

const DEBUG_LOG_PATH = '/tmp/evermem-debug.log';

// Check debug flag (after config.js loads .env)
const DEBUG = process.env.EVERMEM_DEBUG === '1';

// Optional prefix for log lines (e.g., 'inject' or 'store')
let debugPrefix = '';

/**
 * Set a prefix for debug log lines
 * @param {string} prefix - Prefix to add (e.g., 'inject', 'store')
 */
export function setDebugPrefix(prefix) {
  debugPrefix = prefix ? `[${prefix}] ` : '';
}

/**
 * Write debug message to log file
 * Only writes when EVERMEM_DEBUG=1
 *
 * @param {...any} args - Arguments to log (objects are JSON stringified)
 */
export function debug(...args) {
  if (!DEBUG) return;

  const msg = args.map(a =>
    typeof a === 'object' ? JSON.stringify(a, null, 2) : a
  ).join(' ');

  const timestamp = new Date().toISOString();
  const line = `[${timestamp}] ${debugPrefix}${msg}\n`;

  try {
    appendFileSync(DEBUG_LOG_PATH, line);
  } catch (e) {
    // Silent on write errors
  }
}

/**
 * Check if debug mode is enabled
 * @returns {boolean}
 */
export function isDebugEnabled() {
  return DEBUG;
}
