// js/components/widgets/entradas/EntradaFormModal.jsx
// [Wave 23 v224.4 NUCLEAR] Modal "Registrar Entrada de Estoque"
// Extraído de pages/Entradas.jsx L1025-1219 (literal)
//
// Deps runtime globals: Modal, SmartSelect, fmt, W_ALFONSO, W_SENADOR (via calcs)
(function(){
  'use strict';

  // [v224.73 + v224.55] vars MOVED to component body
  function EntradaFormModal(props){
    const calcs = window.ZNX && window.ZNX.entradas && window.ZNX.entradas.calcs;
    const W_ALFONSO = (calcs && calcs.W_ALFONSO) || '507c0241-6ee7-491a-bc6c-aab8e4d630d8';
    const W_SENADOR = (calcs && calcs.W_SENADOR) || '05a89051-be3e-48e2-8ed0-c7674b72d97a';
    const fmt = window.fmt || function(v){return 'R$ '+Number(v||0).toFixed(2);};
    const Modal = window.Modal;
    const SmartSelect = window.SmartSelect;
    if(!Modal){
      const _msg = '[EntradaFormModal] Modal global faltando';
      console.error(_msg);
      if(window.Sentry && typeof window.Sentry.captureMessage === 'function'){
        window.Sentry.captureMessage(_msg, 'error');
      }
      return null;
    }

    const {form, setForm, suppliers, products, suppResults, prodResults,
      prodSearch, setProdSearch, showDrop, setShowDrop, selectedProd, setSelectedProd,
      suppSearch, setSuppSearch, showSuppDrop, setShowSuppDrop, selectedSupp, setSelectedSupp,
      notasAbertas, warehouses, onSave, onCancel, isSavingEntry, canSeeCost,
      notaProgress, selectProduct, selectSupplier} = props;

    const selP = form.productId ? (products||[]).find(function(p){return p.id===form.productId;}) : null;
    const newAvg = selP ? (selP.stock===0 ? Number(form.unitCost) : ((selP.stock*selP.avgCost + Number(form.qty)*Number(form.unitCost))/(selP.stock+Number(form.qty)))) : 0;

    return (
      <Modal title="Registrar Entrada de Estoque" onClose={onCancel}>
        {/* Smart product search */}
        <div className="form-group full" style={{marginBottom:14,position:'relative'}}>
          <label>Produto</label>
          <div style={{position:'relative'}}>
            <span style={{position:'absolute',left:10,top:'50%',transform:'translateY(-50%)',fontSize:14,color:'#9CA3AF',pointerEvents:'none'}}>🔍</span>
            <input
              style={{paddingLeft:32,background:selectedProd?'#F0FDF4':'#FFFFFF',borderColor:selectedProd?'#16A34A':'#E4E7EC'}}
              placeholder="Buscar por nome, marca ou código..."
              value={prodSearch}
              onChange={function(e){setProdSearch(e.target.value); setShowDrop(true); if(!e.target.value){setSelectedProd(null); setForm(function(f){var n=Object.assign({},f); n.productId=''; return n;});}}}
              onFocus={function(){setShowDrop(true);}}
              onBlur={function(){setTimeout(function(){setShowDrop(false);},180);}}
              autoComplete="off"/>
            {selectedProd && <span style={{position:'absolute',right:10,top:'50%',transform:'translateY(-50%)',fontSize:16,color:'#16A34A',pointerEvents:'none'}}>✓</span>}
          </div>
          {showDrop && (
            <div style={{position:'absolute',top:'100%',left:0,right:0,zIndex:200,background:'#F9FAFB',border:'1px solid #E4E7EC',borderRadius:8,boxShadow:'0 8px 24px rgba(0,0,0,0.12)',maxHeight:280,overflowY:'auto'}}>
              {prodResults.length===0 ?
                <div style={{padding:'12px 14px',color:'#6B7280',fontSize:13}}>Nenhum produto encontrado</div>
              :
                prodResults.map(function(p){
                  const stockColor = p.stock<=0?'#DC2626':p.stock<5?'#EA580C':'#16A34A';
                  return (
                    <div key={p.id} onMouseDown={function(){selectProduct(p);}}
                      style={{padding:'10px 14px',cursor:'pointer',borderBottom:'1px solid #F3F4F6',background:(selectedProd && selectedProd.id===p.id)?'#F0FDF4':'transparent',display:'flex',justifyContent:'space-between',alignItems:'center',transition:'background .1s'}}
                      onMouseEnter={function(e){e.currentTarget.style.background='#F0FDF4';}}
                      onMouseLeave={function(e){e.currentTarget.style.background=(selectedProd && selectedProd.id===p.id)?'#F0FDF4':'transparent';}}>
                      <div>
                        <div style={{fontWeight:500,fontSize:13,color:'#374151'}}>{p.name}</div>
                        <div style={{fontSize:11,color:'#9CA3AF',marginTop:2}}>
                          {p.brand && <span style={{color:'#2563EB',marginRight:8}}>{p.brand}</span>}
                          {p.code && <span style={{marginRight:8}}>#{p.code}</span>}
                          {canSeeCost && ('Custo: '+fmt(p.avgCost||0))}
                        </div>
                      </div>
                      <div style={{textAlign:'right',flexShrink:0,marginLeft:12}}>
                        <div style={{fontSize:12,fontWeight:600,color:stockColor}}>{p.stock} un.</div>
                        <div style={{fontSize:10,color:'#6B7280'}}>em estoque</div>
                      </div>
                    </div>
                  );
                })
              }
            </div>
          )}
        </div>

        <div className="form-grid">
          {/* Fornecedor */}
          <div className="form-group" style={{position:'relative'}}>
            <label>Fornecedor</label>
            <div style={{position:'relative'}}>
              <span style={{position:'absolute',left:10,top:'50%',transform:'translateY(-50%)',fontSize:13,color:'#9CA3AF',pointerEvents:'none'}}>🔍</span>
              <input
                style={{paddingLeft:32,background:selectedSupp?'#EFF6FF':'#FFFFFF',borderColor:selectedSupp?'#2563EB':'#E4E7EC'}}
                placeholder="Buscar fornecedor..."
                value={suppSearch}
                onChange={function(e){setSuppSearch(e.target.value); setShowSuppDrop(true); if(!e.target.value){setSelectedSupp(null); setForm(function(f){var n=Object.assign({},f); n.supplierId=''; return n;});}}}
                onFocus={function(){setShowSuppDrop(true);}}
                onBlur={function(){setTimeout(function(){setShowSuppDrop(false);},180);}}
                autoComplete="off"/>
              {selectedSupp && <span style={{position:'absolute',right:10,top:'50%',transform:'translateY(-50%)',fontSize:14,color:'#2563EB',pointerEvents:'none'}}>✓</span>}
            </div>
            {showSuppDrop && (
              <div style={{position:'absolute',top:'100%',left:0,right:0,zIndex:201,background:'#F9FAFB',border:'1px solid #E4E7EC',borderRadius:8,boxShadow:'0 8px 24px rgba(0,0,0,0.12)',maxHeight:200,overflowY:'auto'}}>
                {suppResults.length===0 ?
                  <div style={{padding:'10px 14px',color:'#6B7280',fontSize:13}}>Nenhum fornecedor encontrado</div>
                :
                  suppResults.map(function(s){
                    return (
                      <div key={s.id} onMouseDown={function(){selectSupplier(s);}}
                        style={{padding:'9px 14px',cursor:'pointer',borderBottom:'1px solid #F3F4F6',background:(selectedSupp && selectedSupp.id===s.id)?'#1A1E2A':'transparent'}}
                        onMouseEnter={function(e){e.currentTarget.style.background='#F0FDF4';}}
                        onMouseLeave={function(e){e.currentTarget.style.background=(selectedSupp && selectedSupp.id===s.id)?'#1A1E2A':'transparent';}}>
                        <div style={{fontWeight:500,fontSize:13,color:'#374151'}}>{s.name}</div>
                        {(s.country||s.products) && (
                          <div style={{fontSize:11,color:'#9CA3AF',marginTop:2}}>
                            {s.country && <span style={{marginRight:8}}>📍{s.country}</span>}
                            {s.products && <span style={{color:'#2563EB'}}>{s.products.slice(0,40)}{s.products.length>40?'…':''}</span>}
                          </div>
                        )}
                      </div>
                    );
                  })
                }
              </div>
            )}
          </div>
          <div className="form-group"><label>Data</label><input type="date" value={form.date} onChange={function(e){setForm(function(f){var n=Object.assign({},f); n.date=e.target.value; return n;});}}/></div>

          {/* Depósito */}
          {warehouses.length>1 && (
            <div className="form-group">
              <label>Depósito de destino <span style={{color:'#DC2626'}}>*</span></label>
              <select value={form.warehouseId||''} onChange={function(e){setForm(function(f){var n=Object.assign({},f); n.warehouseId=e.target.value; return n;});}}
                style={{width:'100%',padding:'8px 10px',border:'1px solid '+(form.warehouseId?'#E4E7EC':'#DC2626'),borderRadius:6,fontSize:13,background:'#fff',fontWeight:600}}>
                {warehouses.map(function(w){return <option key={w.id} value={w.id}>{w.name}{w.is_principal?' (principal)':''}</option>;})}
              </select>
              <div style={{fontSize:11,color:'#6B7280',marginTop:3}}>
                {form.warehouseId===W_SENADOR ? '📦 Senador é o destino padrão de recebimento' : form.warehouseId===W_ALFONSO ? '🏪 Alfonso é o PDV principal' : ''}
              </div>
            </div>
          )}
          <div className="form-group"><label>Quantidade</label><input type="number" min="1" value={form.qty} onChange={function(e){setForm(function(f){var n=Object.assign({},f); n.qty=e.target.value; return n;});}}/></div>
          <div className="form-group"><label>Custo Unitário (R$)</label><input type="number" step="0.01" value={form.unitCost} onChange={function(e){setForm(function(f){var n=Object.assign({},f); n.unitCost=e.target.value; return n;});}}/></div>
          <div className="form-group full"><label>Observação</label><input value={form.notes} onChange={function(e){setForm(function(f){var n=Object.assign({},f); n.notes=e.target.value; return n;});}}/></div>
          <div className="form-group full">
            <label>Nota do Freteiro (opcional)</label>
            {SmartSelect && (
              <SmartSelect value={form.notaFreteiroId||''} onChange={function(val){setForm(function(f){var n=Object.assign({},f); n.notaFreteiroId=val||''; return n;});}}
                placeholder="— Entrada avulsa —"
                options={[{value:'',label:'— Entrada avulsa —'}].concat((notasAbertas||[]).map(function(n){return {value:n.id, label:n.number+' · '+n.freteiro+' ('+notaProgress(n).reduce(function(s,i){return s+i.faltando;},0)+' un. faltando)'};}))}/>
            )}
          </div>
        </div>

        {/* Pagamento ao fornecedor */}
        {form.supplierId && (Number(form.qty)*Number(form.unitCost) > 0) && (
          <div style={{marginTop:12,padding:14,background:'#F8FAFC',border:'1px solid #E4E7EC',borderRadius:8}}>
            <div style={{fontSize:11,color:'#6B7280',fontWeight:700,textTransform:'uppercase',letterSpacing:0.5,marginBottom:10}}>💳 Pagamento ao Fornecedor</div>
            <div style={{display:'flex',gap:8,marginBottom:10}}>
              <label style={{flex:1,padding:'10px 12px',border:'2px solid '+(form.alreadyPaid?'#16A34A':'#E4E7EC'),background:form.alreadyPaid?'#ECFDF5':'#fff',borderRadius:6,cursor:'pointer',display:'flex',alignItems:'center',gap:8}}>
                <input type="radio" checked={form.alreadyPaid===true} onChange={function(){setForm(function(f){var n=Object.assign({},f); n.alreadyPaid=true; return n;});}} style={{cursor:'pointer'}}/>
                <div>
                  <div style={{fontSize:13,fontWeight:700,color:form.alreadyPaid?'#065F46':'#374151'}}>✅ Já paguei</div>
                  <div style={{fontSize:11,color:'#6B7280'}}>Não cria conta a pagar</div>
                </div>
              </label>
              <label style={{flex:1,padding:'10px 12px',border:'2px solid '+(!form.alreadyPaid?'#EA580C':'#E4E7EC'),background:!form.alreadyPaid?'#FEF3C7':'#fff',borderRadius:6,cursor:'pointer',display:'flex',alignItems:'center',gap:8}}>
                <input type="radio" checked={form.alreadyPaid!==true} onChange={function(){setForm(function(f){var n=Object.assign({},f); n.alreadyPaid=false; return n;});}} style={{cursor:'pointer'}}/>
                <div>
                  <div style={{fontSize:13,fontWeight:700,color:!form.alreadyPaid?'#92400E':'#374151'}}>📅 Vou pagar depois</div>
                  <div style={{fontSize:11,color:'#6B7280'}}>Cria conta a pagar automaticamente</div>
                </div>
              </label>
            </div>
            {!form.alreadyPaid && (
              <div style={{display:'flex',gap:10,alignItems:'center'}}>
                <span style={{fontSize:12,color:'#6B7280'}}>Vencimento em</span>
                <input type="number" min="1" max="365" value={form.dueDays||30}
                  onChange={function(e){setForm(function(f){var n=Object.assign({},f); n.dueDays=Math.max(1,Math.min(365,Number(e.target.value)||30)); return n;});}}
                  style={{width:70,padding:'4px 8px',border:'1px solid #E4E7EC',borderRadius:4,fontSize:12,textAlign:'center'}}/>
                <span style={{fontSize:12,color:'#6B7280'}}>dias</span>
                {[7,15,30,45,60,90].map(function(d){
                  return (
                    <button key={d} type="button" onClick={function(){setForm(function(f){var n=Object.assign({},f); n.dueDays=d; return n;});}}
                      style={{padding:'2px 8px',fontSize:11,border:'1px solid #E4E7EC',background:form.dueDays===d?'#1B2A4A':'#F9FAFB',color:form.dueDays===d?'#fff':'#6B7280',borderRadius:4,cursor:'pointer',fontWeight:600}}>{d}d</button>
                  );
                })}
                <span style={{marginLeft:'auto',fontSize:11,color:'#92400E',fontWeight:600}}>
                  Vence em: {(function(){
                    const d = new Date(); d.setDate(d.getDate() + (Number(form.dueDays)||30));
                    return d.toLocaleDateString('pt-BR');
                  })()}
                </span>
              </div>
            )}
          </div>
        )}
        {!form.supplierId && (Number(form.qty)*Number(form.unitCost) > 0) && (
          <div style={{marginTop:8,padding:10,background:'#FEF3C7',border:'1px solid #FCD34D',borderRadius:6,fontSize:12,color:'#92400E'}}>
            ⚠️ Sem fornecedor selecionado — não vai ser criada conta a pagar.
          </div>
        )}

        {/* Resumo selecionado */}
        {selP && (
          <div style={{background:'#F9FAFB',borderRadius:6,padding:'10px 14px',marginTop:4,fontSize:13,display:'flex',gap:20,flexWrap:'wrap'}}>
            <span><span className="dim">Estoque atual: </span><span style={{fontWeight:600}}>{selP.stock} un.</span></span>
            {canSeeCost && <span><span className="dim">Custo médio atual: </span><span className="gold">{fmt(selP.avgCost||0)}</span></span>}
            {canSeeCost && form.qty>0 && form.unitCost>0 && <span><span className="dim">Novo custo médio: </span><span className="gold">{fmt(newAvg)}</span></span>}
            {canSeeCost && form.qty>0 && form.unitCost>0 && <span><span className="dim">Total entrada: </span><span className="gold">{fmt(Number(form.qty)*Number(form.unitCost))}</span></span>}
          </div>
        )}

        <div style={{display:'flex',gap:10,marginTop:20,justifyContent:'flex-end'}}>
          <button className="btn-outline" onClick={onCancel} disabled={isSavingEntry}>Cancelar</button>
          <button className="btn-gold" onClick={onSave} disabled={!form.productId||isSavingEntry} style={{opacity:isSavingEntry?0.6:1,cursor:isSavingEntry?'not-allowed':'pointer'}}>{isSavingEntry?'⏳ Registrando…':'Registrar'}</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.EntradaFormModal = EntradaFormModal;
})();
