// js/components/widgets/users/AdminNotesModal.jsx
// [Wave 19 v224.0 20260522] Modal notas privadas admin sobre user.
// RLS backend garante só admin SELECT/UPDATE (trigger tg_admin_notes_admin_only).
(function(){
  'use strict';
  const {useState} = React;

  function AdminNotesModal({user, target, onClose}){
    const [notes, setNotes] = useState((target && target.admin_notes) || '');
    const [saving, setSaving] = useState(false);

    async function save(){
      if (saving) return;
      setSaving(true);
      try {
        const { error } = await window.sb.from('app_users').update({
          admin_notes: notes.trim() || null,
          admin_notes_updated_at: new Date().toISOString(),
          admin_notes_updated_by: user.id
        }).eq('id', target.id);
        if (error) throw error;
        if (window.toast) window.toast('✅ Notas salvas');
        else if (window.showToast) window.showToast('Notas salvas', 'success');
        onClose();
      } catch(e){
        console.error('[AdminNotesModal] save fail:', e && e.message);
        if (window.toast) window.toast('❌ Erro: '+(e && e.message));
        else if (window.showToast) window.showToast('Erro: '+(e && e.message), 'error');
        if (window.Sentry) window.Sentry.captureException(e, { tags: { ctx: 'admin_notes_save' } });
      } finally { setSaving(false); }
    }

    if (!target) return null;

    return (
      <div style={{position:'fixed',inset:0,background:'rgba(0,0,0,0.5)',display:'flex',alignItems:'center',justifyContent:'center',zIndex:1000}} onClick={onClose}>
        <div style={{background:'#FFFFFF',borderRadius:10,padding:20,width:'90%',maxWidth:500,maxHeight:'80vh',overflow:'auto',boxShadow:'0 10px 30px rgba(0,0,0,0.3)'}} onClick={e=>e.stopPropagation()}>
          <div style={{display:'flex',justifyContent:'space-between',alignItems:'center',marginBottom:16}}>
            <h3 style={{margin:0,fontSize:16,color:'#1B2A4A'}}>📝 Notas admin · {target.name||target.username}</h3>
            <button onClick={onClose} style={{background:'none',border:'none',fontSize:22,cursor:'pointer',color:'#9CA3AF'}}>×</button>
          </div>
          <div style={{fontSize:11,color:'#6B7280',marginBottom:10,padding:8,background:'#FEF3C7',borderRadius:6,border:'1px solid #FDE68A'}}>
            🔒 <strong>Privado:</strong> só admin vê estas notas. RLS backend garante (trigger admin-only).
          </div>
          <textarea
            value={notes}
            onChange={e=>setNotes(e.target.value)}
            placeholder="Feedback de performance · advertências · elogios · histórico..."
            style={{width:'100%',minHeight:200,padding:10,border:'1px solid #D1D5DB',borderRadius:6,fontSize:13,fontFamily:'inherit',resize:'vertical'}}
            maxLength={2000}
          />
          <div style={{fontSize:10,color:'#9CA3AF',marginTop:4,textAlign:'right'}}>{notes.length}/2000</div>
          {target.admin_notes_updated_at && (
            <div style={{fontSize:10,color:'#9CA3AF',marginTop:6,fontStyle:'italic'}}>
              Última edição: {new Date(target.admin_notes_updated_at).toLocaleString('pt-BR')}
            </div>
          )}
          <div style={{display:'flex',justifyContent:'flex-end',gap:8,marginTop:14}}>
            <button onClick={onClose} disabled={saving} style={{padding:'8px 14px',background:'#FFFFFF',color:'#6B7280',border:'1px solid #D1D5DB',borderRadius:6,fontSize:13,cursor:'pointer'}}>Cancelar</button>
            <button onClick={save} disabled={saving} style={{padding:'8px 14px',background:saving?'#9CA3AF':'#2563EB',color:'#FFFFFF',border:'none',borderRadius:6,fontSize:13,fontWeight:600,cursor:saving?'not-allowed':'pointer'}}>{saving?'Salvando...':'💾 Salvar'}</button>
          </div>
        </div>
      </div>
    );
  }
  window.ZNX = window.ZNX || {};
  window.ZNX.widgets = window.ZNX.widgets || {};
  window.ZNX.widgets.users = window.ZNX.widgets.users || {};
  window.ZNX.widgets.users.AdminNotesModal = AdminNotesModal;
  window.AdminNotesModal = AdminNotesModal;
})();
