import fs from 'fs';
import path from 'path';
import { fileURLToPath } from 'url';

const __dirname = path.dirname(fileURLToPath(import.meta.url));
const SETTINGS_FILE = path.join(__dirname, '..', 'settings.json');

const DEFAULTS = {
  datadomeEnabled: false, // Flag 1: usar el solver 2Captcha cuando la cookie muera
  datadomeAuto: true,     // Flag 2: reintento transparente sin mostrar error al usuario
  levelPackagesEnabled: false, // Fail-closed: la tab NVL y sus peticiones solo existen si se activa
};

let __cache = null;
let __cacheMtime = 0;

// Cache con invalidez por mtime: ediciones manuales del JSON se reflejan
// sin reiniciar el proceso, y writeSettings siempre escribe el archivo
// (su mtime cambia) antes de tocar el cache.
export function readSettings() {
  try {
    const mtime = fs.statSync(SETTINGS_FILE).mtimeMs;
    if (__cache && mtime === __cacheMtime) return __cache;
    __cache = { ...DEFAULTS, ...JSON.parse(fs.readFileSync(SETTINGS_FILE, 'utf8')) };
    __cacheMtime = mtime;
  } catch (_e) {
    if (!__cache) __cache = { ...DEFAULTS };
  }
  return __cache;
}

export function writeSettings(patch) {
  const next = { ...readSettings(), ...patch };
  fs.writeFileSync(SETTINGS_FILE, JSON.stringify(next, null, 2));
  __cache = next;
  __cacheMtime = fs.statSync(SETTINGS_FILE).mtimeMs;
  return next;
}
