// js/components/widgets/produtos/BulkActionModal.jsx
// [Wave 7 KIMI 2026-05-17] Extraído de Produtos.jsx L1198-1259 (62L).
// Padrão: IIFE + window.ZNX.widgets.produtos.BulkActionModal namespace + props injection.
//
// Modal bulk operation — admin/estoquista aplica operação (preço/categoria/gênero/desc/archive)
// em N produtos selecionados. Auditoria gravada em product_price_history. Limite 500/op.
//
// Props (8):
//   bulkModal: object {op, kind, label, placeholder?, requiresValue} — operação atual
//   selectedIdsSize: number — count produtos selecionados (selectedIds.size do pai)
//   setBulkModal: setter — fecha modal
//   bulkValue: string — input controlled value
//   setBulkValue: setter — atualiza input
//   bulkInFlight: bool — loading state (regra_loading_state_obrigatorio)
//   suppliers: array — opções fornecedor (kind='supplier')
//   executeBulk: fn — handler async do pai (chama bulkUpdateProducts RPC)
//
// Deps runtime globals: Modal, SmartSelect (top-level globals, escopo lexical).
(function() {
  'use strict';

  function BulkActionModal({bulkModal, selectedIdsSize, setBulkModal, bulkValue, setBulkValue, bulkInFlight, suppliers, executeBulk}){
    return (
      <Modal title={'📦 '+bulkModal.label+' — '+selectedIdsSize+' produto'+(selectedIdsSize>1?'s':'')} onClose={()=>{setBulkModal(null);setBulkValue('');}}>
        <div style={{display:'flex',flexDirection:'column',gap:12}}>
          {bulkModal.requiresValue && bulkModal.kind === 'supplier' && (
            <div className="form-group">
              <label>Fornecedor</label>
              <SmartSelect width="100%" value={bulkValue} onChange={setBulkValue} placeholder="Selecione..." options={[{value:'',label:'— Limpar (sem fornecedor) —'},...suppliers.map(s=>({value:s.id,label:s.name}))]}/>
            </div>
          )}
          {bulkModal.requiresValue && bulkModal.kind === 'categoria' && (
            <div className="form-group">
              <label>Categoria</label>
              <SmartSelect width="100%" value={bulkValue} onChange={setBulkValue} placeholder="Selecione..." options={[{value:'',label:'— Limpar —'},...['Perfume','Creme','Body Mist','Óleo Perfumado','Home Spray','Outro'].map(c=>({value:c,label:c}))]}/>
            </div>
          )}
          {bulkModal.requiresValue && bulkModal.kind === 'genero' && (
            <div className="form-group">
              <label>Gênero</label>
              <SmartSelect width="100%" value={bulkValue} onChange={setBulkValue} placeholder="Selecione..." options={[{value:'',label:'— Limpar —'},...['Masculino','Feminino','Unissex'].map(g=>({value:g,label:g}))]}/>
            </div>
          )}
          {bulkModal.requiresValue && bulkModal.kind === 'text' && (
            <div className="form-group">
              <label>{bulkModal.label}</label>
              <input type="text" value={bulkValue} onChange={e=>setBulkValue(e.target.value)} placeholder={bulkModal.placeholder||''} autoFocus style={{width:'100%',padding:8,border:'1px solid #E4E7EC',borderRadius:6}}/>
              {bulkModal.op === 'set_ncm' && (
                <div style={{fontSize:11,color:'#6B7280',marginTop:4}}>NCM = 8 dígitos. Perfumes: <strong>33030010</strong>. Cremes: <strong>33049990</strong>.</div>
              )}
            </div>
          )}
          {bulkModal.requiresValue && bulkModal.kind === 'number' && (
            <div className="form-group">
              <label>{bulkModal.label}</label>
              <input type="number" step="0.01" value={bulkValue} onChange={e=>setBulkValue(e.target.value)} placeholder={bulkModal.placeholder||''} autoFocus style={{width:'100%',padding:8,border:'1px solid #E4E7EC',borderRadius:6}}/>
              {bulkModal.op === 'price_pct' && (
                <div style={{fontSize:11,color:'#6B7280',marginTop:4}}>Use número POSITIVO pra subir preço (ex: <strong>8</strong> = +8%) ou NEGATIVO pra baixar (ex: <strong>-5</strong> = -5%).</div>
              )}
              {bulkModal.op === 'margin_min_pct' && (
                <div style={{fontSize:11,color:'#6B7280',marginTop:4}}>Vai ajustar preço SOMENTE de produtos abaixo dessa margem. Ex: <strong>30</strong> = força mínimo 30% margem.</div>
              )}
            </div>
          )}
          {bulkModal.op === 'archive' && (
            <div style={{background:'#FEF2F2',border:'1px solid #FECACA',borderRadius:8,padding:12,fontSize:13,color:'#991B1B'}}>
              ⚠️ Os {selectedIdsSize} produtos selecionados serão arquivados. Eles saem do catálogo (vendedoras não veem mais), mas o histórico de vendas/orçamentos é preservado. Pode reverter editando.
            </div>
          )}
          <div style={{background:'#F8FAFC',border:'1px solid #E4E7EC',borderRadius:6,padding:10,fontSize:12,color:'#374151'}}>
            ✓ Operação atômica (tudo ou nada)<br/>
            ✓ Auditoria gravada em <code>product_price_history</code><br/>
            ✓ Limite 500 produtos por operação
          </div>
        </div>
        <div style={{display:'flex',gap:10,justifyContent:'flex-end',marginTop:16}}>
          <button className="btn-outline" onClick={()=>{setBulkModal(null);setBulkValue('');}} disabled={bulkInFlight}>Cancelar</button>
          <button onClick={executeBulk} disabled={bulkInFlight || (bulkModal.requiresValue && !bulkValue.trim())}
            style={{background:bulkModal.op==='archive'?'#DC2626':'#16A34A',color:'#fff',border:'none',padding:'9px 18px',borderRadius:6,fontWeight:600,cursor:bulkInFlight?'not-allowed':'pointer',opacity:(bulkInFlight||(bulkModal.requiresValue&&!bulkValue.trim()))?0.6:1}}>
            {bulkInFlight?'Aplicando...':'Aplicar a '+selectedIdsSize+' produto'+(selectedIdsSize>1?'s':'')}
          </button>
        </div>
      </Modal>
    );
  }

  window.ZNX = window.ZNX || {};
  window.ZNX.widgets = window.ZNX.widgets || {};
  window.ZNX.widgets.produtos = window.ZNX.widgets.produtos || {};
  window.ZNX.widgets.produtos.BulkActionModal = BulkActionModal;
})();
