// js/components/widgets/vendas/SaleViewModal.jsx
// [Wave 26 v224.7 NUCLEAR] Modal VIEW venda read-only + botão Gerar Fatura PDF
// Extraído de Vendas.jsx L1077-1142 (literal · zero mudança lógica)
//
// Deps runtime globals: fmt, fmtDate, Modal, StatusBadge, saleFinalTotal, saleProfit, saleDiscount, saleGross, itemNet, nid
(function(){
  'use strict';

  function SaleViewModal(props){
    const fmt = window.fmt || function(v){return 'R$ '+Number(v||0).toFixed(2);};
    const fmtDate = window.fmtDate || function(d){return String(d);};
    const Modal = window.Modal;
    const StatusBadge = window.StatusBadge || function(p){return <span>{p.status}</span>;};
    const saleFinalTotal = window.saleFinalTotal || function(s){return Number(s.total||0);};
    const saleProfit = window.saleProfit || function(){return 0;};
    const saleDiscount = window.saleDiscount || function(){return 0;};
    const saleGross = window.saleGross || function(items){return (items||[]).reduce(function(s,i){return s+(Number(i.qty||0)*Number(i.price||0));},0);};
    const itemNet = window.itemNet || function(it){return (it.price||0)*(1-(Number(it.discountPct||0)/100));};
    const nidFn = window.nid || function(a,b){return String(a)===String(b);};

    const {viewSale, clients, products, isAdmin, onClose, onGenerateFaturaPDF} = props;
    if(!viewSale || !Modal) return null;

    return (
      <Modal title={'Venda '+viewSale.number} onClose={onClose} large>
        <div style={{display:'flex',justifyContent:'flex-end',marginBottom:12}}>
          <button className="btn-gold" onClick={onGenerateFaturaPDF} style={{display:'flex',alignItems:'center',gap:6,fontSize:13}}>📄 Gerar Fatura PDF</button>
        </div>
        <div style={{display:'grid',gridTemplateColumns:'1fr 1fr',gap:12,marginBottom:16,fontSize:13}}>
          <div><span className="dim">Cliente: </span>{(clients.find(function(c){return c.id===viewSale.clientId;}) || {}).name || viewSale.clientName || viewSale.client}</div>
          <div><span className="dim">Data: </span>{fmtDate(viewSale.date)}</div>
          <div><span className="dim">Vendedor: </span>{viewSale.sellerName || '—'}</div>
          <div><span className="dim">Entrega: </span>{viewSale.freteType || viewSale.frete_type || '—'}{(viewSale.embalagemTipo || viewSale.embalagem_tipo)?' · '+(viewSale.embalagemTipo || viewSale.embalagem_tipo):''}</div>
          {['PAC','Sedex'].includes(viewSale.freteType || viewSale.frete_type) && viewSale.enderecoEntrega && viewSale.enderecoEntrega.nome && (
            <div style={{gridColumn:'1/-1',background:'#F0F4FF',border:'1px solid #C7D2FE',borderRadius:8,padding:'8px 12px',fontSize:12}}>
              <span className="dim">Destinatário: </span><strong>{viewSale.enderecoEntrega.nome}</strong>
              {viewSale.enderecoEntrega.cep && <> · CEP {viewSale.enderecoEntrega.cep}</>}
              {viewSale.enderecoEntrega.endereco && <> · {viewSale.enderecoEntrega.endereco}{viewSale.enderecoEntrega.numero?', '+viewSale.enderecoEntrega.numero:''}</>}
              {viewSale.enderecoEntrega.cidade && <> · {viewSale.enderecoEntrega.cidade}/{viewSale.enderecoEntrega.estado}</>}
            </div>
          )}
          {(viewSale.freteType || viewSale.frete_type)==='Transportadora' && viewSale.obsTransportadora && (
            <div style={{gridColumn:'1/-1',background:'#F0F4FF',border:'1px solid #C7D2FE',borderRadius:8,padding:'8px 12px',fontSize:12}}>
              <span className="dim">Obs. caixa: </span>{viewSale.obsTransportadora}
            </div>
          )}
          <div><span className="dim">Pagamento: </span><StatusBadge status={viewSale.paymentStatus}/></div>
          {viewSale.paymentMethod && (
            <div>
              <span className="dim">Forma: </span>
              <span style={{fontWeight:700,color:'#1B2A4A'}}>
                {viewSale.paymentMethod==='Pix' ? '🔵 Pix'
                  : viewSale.paymentMethod==='Dinheiro Vivo' ? '💵 Dinheiro Vivo'
                  : viewSale.paymentMethod==='Misto' ? ('🔀 Misto — 🔵 '+fmt(Number(viewSale.paymentPixValue||viewSale.payment_pix_value||0))+' + 💵 '+fmt(Number(viewSale.paymentCashValue||viewSale.payment_cash_value||0)))
                  : viewSale.paymentMethod}
              </span>
            </div>
          )}
          {viewSale.fromQuote && <div style={{gridColumn:'1/-1'}}><span className="dim">Origem: </span><span style={{color:'#1B2A4A',fontWeight:600}}>{viewSale.fromQuote}</span></div>}
          {viewSale.obs && <div style={{gridColumn:'1/-1'}}><span className="dim">Observações: </span><span style={{color:'#374151'}}>{viewSale.obs}</span></div>}
        </div>
        <table>
          <thead><tr><th>Produto</th><th>Depósito</th><th>Qtd</th><th>Preço</th><th>Desc%</th><th>Subtotal</th>{isAdmin && <th>Lucro</th>}</tr></thead>
          <tbody>
            {viewSale.items.map(function(it, i){
              const p = products.find(function(x){return nidFn(x.id, it.productId);});
              const luc = it.qty * (itemNet(it) - ((p && p.avgCost)||0));
              const whId = it.warehouseId || it.warehouse_id;
              const whLabel = whId==='507c0241-6ee7-491a-bc6c-aab8e4d630d8' ? 'Alfonso'
                : whId==='05a89051-be3e-48e2-8ed0-c7674b72d97a' ? 'Senador' : '—';
              const whBg = whLabel==='Alfonso' ? '#DBEAFE' : whLabel==='Senador' ? '#FEF3C7' : '#F3F4F6';
              const whColor = whLabel==='Alfonso' ? '#1E40AF' : whLabel==='Senador' ? '#92400E' : '#6B7280';
              return (
                <tr key={i}>
                  <td>{(p && p.name) || it.name || it.productName || it.product_name || '—'}</td>
                  <td><span style={{background:whBg,color:whColor,fontSize:11,fontWeight:600,padding:'2px 8px',borderRadius:999}}>{whLabel}</span></td>
                  <td>{it.qty}</td><td>{fmt(it.price)}</td>
                  <td style={{color:it.discountPct>0?'#EA580C':'#555'}}>{it.discountPct>0?it.discountPct+'%':'—'}</td>
                  <td className="gold">{fmt(it.qty*itemNet(it))}</td>
                  {isAdmin && <td style={{color:luc>=0?'#16A34A':'#DC2626'}}>{fmt(luc)}</td>}
                </tr>
              );
            })}
            {saleDiscount(viewSale.items)>0 && <tr><td colSpan={isAdmin?5:4} style={{textAlign:'right',color:'#9CA3AF',fontSize:12}}>Subtotal bruto:</td><td style={{color:'#9CA3AF'}}>{fmt(saleGross(viewSale.items))}</td>{isAdmin && <td/>}</tr>}
            {saleDiscount(viewSale.items)>0 && <tr><td colSpan={isAdmin?5:4} style={{textAlign:'right',color:'#EA580C',fontSize:12}}>Desconto:</td><td style={{color:'#EA580C'}}>−{fmt(saleDiscount(viewSale.items))}</td>{isAdmin && <td/>}</tr>}
            <tr>
              <td colSpan={isAdmin?5:4} style={{textAlign:'right',fontWeight:600}}>TOTAL LÍQUIDO</td>
              <td className="gold" style={{fontWeight:700}}>{fmt(saleFinalTotal(viewSale))}</td>
              {isAdmin && <td style={{color:'#16A34A',fontWeight:700}}>{fmt(saleProfit(viewSale.items, products))}</td>}
            </tr>
          </tbody>
        </table>
      </Modal>
    );
  }

  window.ZNX = window.ZNX || {};
  window.ZNX.widgets = window.ZNX.widgets || {};
  window.ZNX.widgets.vendas = window.ZNX.widgets.vendas || {};
  window.ZNX.widgets.vendas.SaleViewModal = SaleViewModal;
  window.SaleViewModal_v224_7_wave26 = true;
})();
