// Centralizado: controle de impressão segura e única
// Garante uma única impressão por padrão e múltiplas apenas quando explicitamente solicitadas
(function(){
  const state = {
    locked: false,
    lockUntil: 0
  };

  function delay(ms){ return new Promise(res => setTimeout(res, ms)); }
  function lock(ms){
    const time = Math.max(200, Number(ms||2000));
    state.locked = true;
    state.lockUntil = Date.now() + time;
    setTimeout(()=>{ state.locked = false; state.lockUntil = 0; }, time);
  }

  async function safeWindowPrint(win, opts){
    const copies = Math.max(1, parseInt((opts&&opts.copies)||1, 10));
    const lockMs = (opts&&opts.lockMs) || 2000;
    if (!win || typeof win.print !== 'function') { console.warn('Janela de impressão indisponível'); return; }
    if (state.locked) { console.warn('Impressão já em andamento, ignorando chamada duplicada'); return; }
    lock(lockMs);
    for (let i=0;i<copies;i++){
      try { win.focus(); } catch(_){ }
      try { win.print(); } catch(e){ console.warn('Falha ao imprimir na janela, fallback para window.print', e); try{ window.print(); }catch(_){ } }
      if (i < copies-1) { await delay(500); }
    }
    try { win.close(); } catch(_){ }
  }

  async function safePrint(opts){
    const copies = Math.max(1, parseInt((opts&&opts.copies)||1, 10));
    const lockMs = (opts&&opts.lockMs) || 2000;
    if (state.locked) { console.warn('Impressão já em andamento, ignorando chamada duplicada'); return; }
    lock(lockMs);
    for (let i=0;i<copies;i++){
      try { window.print(); } catch(e){ console.warn('Falha ao imprimir', e); }
      if (i < copies-1) { await delay(500); }
    }
  }

  function bindOnce(el, event, handler){
    if (!el) return;
    const k = 'data-bind-'+String(event||'');
    if (el.getAttribute(k)) return;
    el.setAttribute(k, '1');
    el.addEventListener(event, handler);
  }

  window.PrintControl = {
    isLocked: () => state.locked,
    safePrint,
    safeWindowPrint,
    bindOnce
  };

  // Helper simples para uso em onclick: safePrint(quantidade)
  window.safePrint = function(copies){ return safePrint({ copies: copies||1 }); };
})();