// js/components/widgets/entradas/EntradaCancelModal.jsx
// [Wave 4 KIMI Strategy C 2026-05-15] Extraído de Entradas.jsx L1700-1732 — refactor zero-lógica.
// Padrão: IIFE + window.ZNX.widgets.entradas.X namespace + props injection.
//
// Modal admin-only de cancelamento de entrada (void). Confirma motivo obrigatório (≥3 chars),
// dispara confirmVoid handler do pai. Reverte estoque + recalcula avg_cost via RPC void_entry_v1.
//
// Props (validados FASE 1.5 = 7 props):
//   voidModal: object {entry, productName} | null — modal data (objeto OK pra modal contexto)
//   voidReason: string — textarea controlled value
//   voidInFlight: bool — loading state (regra_loading_state_obrigatorio)
//   setVoidModal: setter — close modal
//   setVoidReason: setter — controlled textarea
//   onConfirm: async fn — confirmVoid handler do pai
//   warehouseName: fn(id) → string — resolve warehouse name
//
// Deps runtime globals: Modal (window.Modal componente compartilhado).
(function() {
  'use strict';

  function EntradaCancelModal({voidModal, voidReason, voidInFlight, setVoidModal, setVoidReason, onConfirm, warehouseName}){
    return (
      <Modal title="🗑 Cancelar entrada de estoque" onClose={()=>{setVoidModal(null);setVoidReason('');}}>
        <div style={{display:'flex',flexDirection:'column',gap:14}}>
          <div style={{background:'#FEF2F2',border:'1px solid #FECACA',borderRadius:8,padding:14}}>
            <div style={{fontSize:13,fontWeight:600,color:'#991B1B',marginBottom:6}}>⚠️ Esta ação irá:</div>
            <ul style={{fontSize:12,color:'#991B1B',margin:0,paddingLeft:20,lineHeight:1.6}}>
              <li>Reverter <strong>{voidModal.entry.qty} un.</strong> do estoque de <strong>{voidModal.productName}</strong> no depósito <strong>{warehouseName(voidModal.entry.warehouseId||voidModal.entry.warehouse_id)}</strong></li>
              <li>Recalcular o custo médio</li>
              <li>Marcar a entrada como cancelada (auditoria preservada)</li>
            </ul>
          </div>
          <div className="form-group">
            <label>Motivo do cancelamento <span style={{color:'#DC2626'}}>*</span></label>
            <textarea
              value={voidReason}
              onChange={e=>setVoidReason(e.target.value)}
              placeholder="Ex: erro de digitação, entrada duplicada, devolução do fornecedor..."
              rows={3}
              style={{width:'100%',padding:10,border:'1px solid #E4E7EC',borderRadius:6,fontFamily:'inherit',fontSize:13,resize:'vertical'}}
            />
            <div style={{fontSize:11,color:'#6B7280',marginTop:4}}>{voidReason.length}/3 chars mínimo</div>
          </div>
        </div>
        <div style={{display:'flex',gap:10,justifyContent:'flex-end',marginTop:14}}>
          <button className="btn-outline" onClick={()=>{setVoidModal(null);setVoidReason('');}} disabled={voidInFlight}>Voltar</button>
          <button
            onClick={onConfirm}
            disabled={voidInFlight||voidReason.trim().length<3}
            style={{background:'#DC2626',color:'#fff',border:'none',padding:'9px 18px',borderRadius:6,fontWeight:600,cursor:voidInFlight||voidReason.trim().length<3?'not-allowed':'pointer',opacity:voidInFlight||voidReason.trim().length<3?0.6:1}}
          >{voidInFlight?'Cancelando...':'🗑 Confirmar cancelamento'}</button>
        </div>
      </Modal>
    );
  }

  window.ZNX = window.ZNX || {};
  window.ZNX.widgets = window.ZNX.widgets || {};
  window.ZNX.widgets.entradas = window.ZNX.widgets.entradas || {};
  window.ZNX.widgets.entradas.EntradaCancelModal = EntradaCancelModal;
})();
