// js/components/widgets/clientes/TransferClientSellerModal.jsx
// [v224.130] Admin transfer cliente entre vendedoras · chama transfer_client_seller_v1.
// Padrão família BlockClientModal: window.Modal + title/onClose · window.sb.rpc · window.toast.
// Reutilizável: ClientModal ficha (botão admin) + Cliente 360 futuro.
(function(){
  'use strict';
  var useState = React.useState, useMemo = React.useMemo;

  function TransferClientSellerModal(props){
    var client = props.client;
    var sellers = props.sellers || [];
    var onClose = props.onClose || function(){};
    var onSuccess = props.onSuccess;

    var Modal = window.Modal;
    if (!Modal) {
      if (window.Sentry && typeof window.Sentry.captureMessage === 'function') {
        try { window.Sentry.captureMessage('[v224.130] TransferClientSellerModal missing Modal', 'error'); } catch(e){}
      }
      console.error('[TransferClientSellerModal] Modal faltando');
      return null;
    }
    if (!client) return null;

    var toast = (typeof window.toast === 'function') ? window.toast : function(m){ console.log('[toast]', m); };
    var curSeller = client.seller_id || client.sellerId || '';

    var _ns = useState(''); var newSellerId = _ns[0], setNewSellerId = _ns[1];
    var _r = useState(''); var reason = _r[0], setReason = _r[1];
    var _s = useState(false); var saving = _s[0], setSaving = _s[1];

    var activeSellers = useMemo(function(){
      return (sellers || []).filter(function(s){ return s && s.active !== false && (s.role === 'vendedor' || s.role === 'admin'); })
        .sort(function(a,b){ return (a.name || '').localeCompare(b.name || ''); });
    }, [sellers]);
    var oldSeller = (sellers || []).find(function(s){ return s.id === curSeller; });
    var newSeller = (sellers || []).find(function(s){ return s.id === newSellerId; });
    var sameAsCurrent = curSeller === newSellerId;

    function handleSubmit(){
      if (saving) return;
      if (!newSellerId) { toast('⚠ Selecione uma vendedora'); return; }
      if (sameAsCurrent) { toast('⚠ Cliente já pertence a esta vendedora'); return; }
      if (reason.trim().length < 10) { toast('⚠ Motivo obrigatório (mín 10 caracteres)'); return; }
      if (!window.sb || typeof window.sb.rpc !== 'function') { toast('❌ Conexão indisponível'); return; }
      setSaving(true);
      var idem = (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') ? crypto.randomUUID() : null;
      window.sb.rpc('transfer_client_seller_v1', {
        p_client_id: client.id, p_new_seller_id: newSellerId, p_reason: reason.trim(), p_idem_key: idem
      }).then(function(res){
        if (res && res.error) throw res.error;
        toast('✅ ' + (client.name || 'Cliente') + ' transferida para ' + ((newSeller && newSeller.name) || '?'));
        if (onSuccess) onSuccess(res && res.data);
        onClose();
      }).catch(function(e){
        toast('❌ ' + ((e && e.message) || 'Erro'));
        if (window.Sentry) { try { window.Sentry.captureException(e, { tags:{ wave:'v224.130' }, extra:{ action:'transfer_client_seller', client_id: client.id } }); } catch(_){} }
      }).then(function(){ setSaving(false); });
    }

    return (
      <Modal title={'🔄 Trocar vendedora — ' + (client.name || '')} onClose={onClose}>
        <div style={{display:'flex',flexDirection:'column',gap:12}}>
          <div style={{background:'#F9FAFB',borderRadius:8,padding:'10px 12px'}}>
            <div style={{fontSize:11,color:'#6B7280',textTransform:'uppercase',letterSpacing:.5}}>Cliente</div>
            <div style={{fontWeight:700,fontSize:14}}>{client.name}</div>
            <div style={{fontSize:12,color:'#6B7280',marginTop:2}}>Vendedora atual: <strong>{(oldSeller && oldSeller.name) || '(nenhum)'}</strong></div>
          </div>
          <div className="form-group">
            <label>Nova vendedora</label>
            <select value={newSellerId} onChange={function(e){ setNewSellerId(e.target.value); }}
              style={{width:'100%',padding:'8px 10px',borderRadius:6,border:'1px solid #D1D5DB',fontSize:13}}>
              <option value="">— Selecione —</option>
              {activeSellers.map(function(s){ return <option key={s.id} value={s.id}>{s.name}</option>; })}
            </select>
          </div>
          <div className="form-group">
            <label>Motivo (mín 10 caracteres · {reason.length})</label>
            <textarea value={reason} onChange={function(e){ setReason(e.target.value); }} rows={3}
              placeholder="Ex: Cliente atendido por Ana · Tarek 0 sales · transferência operacional"
              style={{width:'100%',padding:'8px 10px',borderRadius:6,border:'1px solid #D1D5DB',fontSize:13,resize:'vertical'}}/>
          </div>
          <div style={{display:'flex',gap:10,justifyContent:'flex-end'}}>
            <button className="btn-outline" onClick={onClose} disabled={saving}>Cancelar</button>
            <button className="btn-gold" onClick={handleSubmit} disabled={saving || sameAsCurrent || !newSellerId || reason.trim().length < 10}>
              {saving ? '⏳ Transferindo...' : '🔄 Transferir'}
            </button>
          </div>
        </div>
      </Modal>
    );
  }

  window.ZNX = window.ZNX || {};
  window.ZNX.widgets = window.ZNX.widgets || {};
  window.ZNX.widgets.clientes = window.ZNX.widgets.clientes || {};
  window.ZNX.widgets.clientes.TransferClientSellerModal = TransferClientSellerModal;
})();
