// SonicForge Studio - Unified Undo/Redo Engine
// Handles all undoable actions across MAIN SESSION and SECTION-TAB

const UndoRedoEngine = (function() {
  const MAX_HISTORY = 50;
  const history = [];
  let historyIndex = -1;

  function push(entry) {
    history.push(entry);
    if (history.length > MAX_HISTORY) {
      history.shift();
    }
    historyIndex = history.length - 1;
  }

  function undo() {
    if (historyIndex < 0) return null;
    const entry = history[historyIndex];
    historyIndex--;
    return entry;
  }

  function redo() {
    if (historyIndex >= history.length - 1) return null;
    historyIndex++;
    const entry = history[historyIndex];
    return entry;
  }

  function canUndo() { return historyIndex >= 0; }
  function canRedo() { return historyIndex < history.length - 1; }

  function clear() {
    history.length = 0;
    historyIndex = -1;
  }

  function execute(entry) {
    // entry: { type, scope, label, before, after, undo, redo }
    // Trim future history if we're not at the end
    if (historyIndex < history.length - 1) {
      history.splice(historyIndex + 1);
    }
    push(entry);
    return entry;
  }

  function getStatus() {
    return {
      canUndo: canUndo(),
      canRedo: canRedo(),
      undoCount: historyIndex + 1,
      redoCount: history.length - historyIndex - 1,
      lastAction: history[historyIndex]?.type || null,
      lastLabel: history[historyIndex]?.label || null
    };
  }

  return {
    push,
    undo,
    redo,
    canUndo,
    canRedo,
    clear,
    execute,
    getStatus,
    history,
    historyIndex
  };
})();

window.UndoRedoEngine = UndoRedoEngine;
