// js/components/widgets/admin-venda-detalhe/AdminVendaDetalheModal.jsx
// [v224.61 NUCLEAR 2026-05-29] Modal expand detalhes venda · admin god-mode
// Features: D (detalhes items+pagto+endereço) + F (histórico reprints) + G (comentário admin)
// Gated isAdmin · estoquista NÃO chama este componente
(function(){
  'use strict';
  const { useState, useEffect } = React;

  function AdminVendaDetalheModal({ sale, isOpen, onClose, onAfterSave }){
    const sb = window.sb;
    const [details, setDetails] = useState(null);
    const [history, setHistory] = useState([]);
    const [loading, setLoading] = useState(false);
    const [adminNotes, setAdminNotes] = useState('');
    const [savingNotes, setSavingNotes] = useState(false);

    useEffect(() => {
      if(!isOpen || !sale?.id) return;
      setLoading(true);
      (async () => {
        try {
          const [fresh, hist] = await Promise.all([
            sb.from('sales').select('*, items:sale_items(*), client:clients!sales_client_id_fkey(*)').eq('id', sale.id).single(),
            sb.rpc('get_sale_reprint_history', { p_sale_id: sale.id })
          ]);
          if(fresh.error) throw fresh.error;
          setDetails(fresh.data);
          setAdminNotes(fresh.data.admin_notes || '');
          if(!hist.error && Array.isArray(hist.data)) setHistory(hist.data);
        } catch(e){
          if(window.toast) window.toast('Erro ao carregar detalhes: '+(e?.message||'unknown'), 'error');
        } finally { setLoading(false); }
      })();
    }, [isOpen, sale?.id]);

    async function saveNotes(){
      if(!sale?.id) return;
      setSavingNotes(true);
      try {
        const { error } = await sb.rpc('admin_update_sale_notes', { p_sale_id: sale.id, p_notes: adminNotes });
        if(error) throw error;
        if(window.toast) window.toast('💬 Notas atualizadas', 'success');
        if(onAfterSave) onAfterSave();
      } catch(e){
        if(window.toast) window.toast('Erro: '+(e?.message||'unknown'), 'error');
      } finally { setSavingNotes(false); }
    }

    if(!isOpen) return null;
    const fmt = (iso) => { try { return new Date(iso).toLocaleString('pt-BR'); } catch(_){ return iso; } };
    const items = (details?.items || []);
    const total = items.reduce((acc, it) => acc + (Number(it.qty||0) * Number(it.price||0)), 0);
    const ee = details?.endereco_entrega || {};

    return React.createElement('div', {
      onClick: (e) => { if(e.target === e.currentTarget) onClose(); },
      style: { position:'fixed', inset:0, background:'rgba(0,0,0,0.7)', zIndex:100002, display:'flex', alignItems:'center', justifyContent:'center', padding:16 }
    },
      React.createElement('div', {
        style: { background:'#FFF', borderRadius:12, maxWidth:760, width:'100%', maxHeight:'90vh', display:'flex', flexDirection:'column', boxShadow:'0 20px 60px rgba(0,0,0,0.5)' }
      },
        React.createElement('div', { style:{padding:'16px 20px',borderBottom:'1px solid #E5E7EB',display:'flex',alignItems:'center',justifyContent:'space-between'} },
          React.createElement('div', null,
            React.createElement('div', { style:{fontSize:18,fontWeight:700,color:'#111827'} }, '📦 '+(sale?.number || 'Venda')),
            React.createElement('div', { style:{fontSize:12,color:'#6B7280',marginTop:2} }, sale?.seller_name || '—')
          ),
          React.createElement('button', { onClick: onClose, style:{background:'transparent',border:'none',fontSize:24,cursor:'pointer',color:'#6B7280'} }, '×')
        ),
        React.createElement('div', { style:{padding:'16px 20px',overflowY:'auto',flex:1} },
          loading ? React.createElement('div', { style:{textAlign:'center',padding:32,color:'#6B7280'} }, 'Carregando detalhes...') :
          !details ? React.createElement('div', { style:{textAlign:'center',padding:32,color:'#EF4444'} }, 'Erro ao carregar') :
          React.createElement(React.Fragment, null,
            React.createElement('div', { style:{marginBottom:16} },
              React.createElement('div', { style:{fontSize:13,fontWeight:700,color:'#374151',marginBottom:8} }, '📋 Items ('+items.length+')'),
              items.length === 0 ? React.createElement('div', { style:{fontSize:12,color:'#9CA3AF',fontStyle:'italic'} }, 'Nenhum item') :
              React.createElement('div', { style:{display:'flex',flexDirection:'column',gap:4} },
                items.map(it => React.createElement('div', {
                  key: it.id,
                  style:{display:'flex',justifyContent:'space-between',padding:'6px 10px',background:'#F9FAFB',borderRadius:6,fontSize:12}
                },
                  React.createElement('span', null, it.qty+'× '+(it.product_name || '—')),
                  React.createElement('span', { style:{color:'#6B7280'} }, 'R$ '+(Number(it.qty||0)*Number(it.price||0)).toFixed(2))
                ))
              ),
              React.createElement('div', { style:{textAlign:'right',marginTop:8,fontWeight:700,fontSize:14,color:'#111827'} }, 'Total: R$ '+total.toFixed(2))
            ),
            React.createElement('div', { style:{marginBottom:16,padding:'10px 12px',background:'#FEF3C7',borderRadius:8} },
              React.createElement('div', { style:{fontSize:13,fontWeight:700,color:'#92400E',marginBottom:6} }, '🚚 Entrega · '+(details.frete_type || '—')),
              React.createElement('div', { style:{fontSize:12,color:'#78350F',lineHeight:1.5} },
                (ee.endereco || details.client?.address || '—') + (ee.numero ? ', '+ee.numero : '') + (ee.bairro ? ' · '+ee.bairro : '') + (ee.cidade ? ' · '+ee.cidade : '') + (ee.cep ? ' · CEP '+ee.cep : ''),
                ee.delivery_date && React.createElement('div', { style:{marginTop:4,fontWeight:600} }, '📅 ' + ee.delivery_date + (ee.delivery_time ? ' às '+ee.delivery_time : '')),
                details.tracking_code && React.createElement('div', { style:{marginTop:4} }, '📍 Rastreio: '+details.tracking_code)
              )
            ),
            React.createElement('div', { style:{marginBottom:16,padding:'10px 12px',background:'#ECFDF5',borderRadius:8} },
              React.createElement('div', { style:{fontSize:13,fontWeight:700,color:'#065F46',marginBottom:6} }, '💰 Pagamento · '+(details.status || '—')),
              React.createElement('div', { style:{fontSize:12,color:'#047857'} },
                (details.payment_method || '—'),
                details.payment_pix_value > 0 && React.createElement('span', null, ' · PIX R$ '+Number(details.payment_pix_value).toFixed(2)),
                details.payment_cash_value > 0 && React.createElement('span', null, ' · Dinheiro R$ '+Number(details.payment_cash_value).toFixed(2))
              )
            ),
            React.createElement('div', { style:{marginBottom:16} },
              React.createElement('div', { style:{fontSize:13,fontWeight:700,color:'#374151',marginBottom:8} }, '💬 Notas internas admin (só admin vê)'),
              React.createElement('textarea', {
                value: adminNotes,
                onChange: e => setAdminNotes(e.target.value),
                placeholder: 'Ex: Cliente brigou cobrança · falar com Mona quinta',
                style:{width:'100%',minHeight:60,padding:8,border:'1px solid #D1D5DB',borderRadius:6,fontSize:12,fontFamily:'inherit',resize:'vertical'}
              }),
              React.createElement('button', {
                onClick: saveNotes, disabled: savingNotes,
                style:{marginTop:6,padding:'6px 12px',background:savingNotes?'#9CA3AF':'#B89840',color:'#FFF',border:'none',borderRadius:6,fontSize:12,fontWeight:600,cursor:savingNotes?'not-allowed':'pointer'}
              }, savingNotes ? '⏳ Salvando...' : '💾 Salvar notas')
            ),
            React.createElement('div', { style:{marginBottom:8} },
              React.createElement('div', { style:{fontSize:13,fontWeight:700,color:'#374151',marginBottom:8} }, '📜 Histórico de ações ('+history.length+')'),
              history.length === 0 ? React.createElement('div', { style:{fontSize:12,color:'#9CA3AF',fontStyle:'italic'} }, 'Sem histórico') :
              React.createElement('div', { style:{display:'flex',flexDirection:'column',gap:6,maxHeight:200,overflowY:'auto'} },
                history.map((h, i) => React.createElement('div', {
                  key: i, style:{padding:'6px 10px',background:'#F3F4F6',borderRadius:6,fontSize:11}
                },
                  React.createElement('div', { style:{display:'flex',justifyContent:'space-between',fontWeight:600,color:'#374151'} },
                    React.createElement('span', null, h.action),
                    React.createElement('span', { style:{color:'#6B7280'} }, fmt(h.created_at))
                  ),
                  React.createElement('div', { style:{color:'#6B7280',marginTop:2} },
                    (h.actor_name || '—') + ' (' + (h.actor_role || '—') + ')' + (h.reason ? ' · ' + h.reason : '')
                  )
                ))
              )
            )
          )
        ),
        React.createElement('div', { style:{padding:'12px 20px',borderTop:'1px solid #E5E7EB',display:'flex',justifyContent:'flex-end',gap:8} },
          React.createElement('button', { onClick: onClose, style:{padding:'8px 14px',background:'transparent',border:'1px solid #D1D5DB',color:'#374151',borderRadius:6,fontSize:12,cursor:'pointer'} }, 'Fechar')
        )
      )
    );
  }

  // [v224.61] Registry no ZNX widgets pra padrão regra_validacao_helpers_runtime
  window.ZNX = window.ZNX || {};
  window.ZNX.widgets = window.ZNX.widgets || {};
  window.ZNX.widgets['admin-venda-detalhe'] = window.ZNX.widgets['admin-venda-detalhe'] || {};
  window.ZNX.widgets['admin-venda-detalhe'].AdminVendaDetalheModal = AdminVendaDetalheModal;
  window.AdminVendaDetalheModal = AdminVendaDetalheModal;
})();
