// js/components/widgets/ResetPasswordModal.jsx
// Modal admin → resetar senha de qualquer user. Backend: admin_reset_user_password RPC.
// Criado 2026-05-06 — Onda C admin reset embutido.
// Deps runtime: Modal, sb, toast
(function() {
  'use strict';
  const {useState} = React;

  function ResetPasswordModal({user, target, onClose, onSuccess}){
    const[password,setPassword]=useState('');
    const[confirm,setConfirm]=useState('');
    const[loading,setLoading]=useState(false);
    const[showPwd,setShowPwd]=useState(false);

    if(!target)return null;

    async function handleReset(){
      if(loading)return;
      // Validações cliente
      if(!password || password.length < 6){
        toast('⚠️ Senha deve ter pelo menos 6 caracteres','warning');return;
      }
      if(password.length > 72){
        toast('⚠️ Senha muito longa (max 72 caracteres)','warning');return;
      }
      if(password !== confirm){
        toast('⚠️ Confirmação não bate com a senha','warning');return;
      }
      // Não deixar resetar a própria senha
      if(target.auth_user_id === user.auth_user_id){
        toast('⚠️ Para sua própria senha use Meu Perfil → Trocar Senha','warning');return;
      }
      setLoading(true);
      try {
        const{data,error} = await sb.rpc('admin_reset_user_password',{
          p_target_user_id: target.auth_user_id,
          p_new_password: password
        });
        if(error){
          toast('❌ '+(error.message||'Erro ao resetar senha'),'error');
          if(typeof Sentry!=='undefined')Sentry.captureException(new Error(error.message),{extra:{context:'admin_reset_password',targetId:target.auth_user_id}});
          return;
        }
        toast('✅ Senha de '+(target.name||'usuário')+' resetada. Ele foi deslogado.');
        if(typeof onSuccess === 'function')onSuccess(data);
        onClose();
      } catch(e){
        toast('❌ Erro inesperado: '+(e?.message||'desconhecido'),'error');
        if(typeof Sentry!=='undefined')Sentry.captureException(e,{extra:{context:'admin_reset_password_exc'}});
      } finally {
        setLoading(false);
      }
    }

    return(
      <Modal title={'🔑 Resetar senha — '+(target.name||target.username||'?')} onClose={onClose}>
        <div style={{display:'flex',flexDirection:'column',gap:14}}>
          <div style={{padding:'10px 14px',background:'#FFFBEB',border:'1px solid #EAB30844',borderRadius:8,fontSize:12,color:'#92700A'}}>
            <strong>⚠️ Atenção:</strong> ao confirmar, {target.name||'o usuário'} será <strong>deslogado de todos os dispositivos</strong> imediatamente. Avise antes de fazer.
          </div>

          <div>
            <label style={{fontSize:12,fontWeight:600,color:'#374151',marginBottom:4,display:'block'}}>Usuário</label>
            <div style={{padding:'8px 12px',background:'#F3F4F6',borderRadius:6,fontSize:13,color:'#1F2937'}}>
              {target.name} <span style={{color:'#6B7280',fontSize:11}}>— {target.role}</span>
            </div>
          </div>

          <div>
            <label style={{fontSize:12,fontWeight:600,color:'#374151',marginBottom:4,display:'block'}}>Nova senha (mín 6 caracteres)</label>
            <div style={{position:'relative'}}>
              <input
                type={showPwd?'text':'password'}
                value={password}
                onChange={e=>setPassword(e.target.value)}
                placeholder="Digite a nova senha"
                style={{width:'100%',padding:'10px 40px 10px 12px',border:'1px solid #D1D5DB',borderRadius:6,fontSize:14}}
                autoFocus
                disabled={loading}
              />
              <button type="button" onClick={()=>setShowPwd(!showPwd)} style={{position:'absolute',right:8,top:'50%',transform:'translateY(-50%)',background:'transparent',border:'none',cursor:'pointer',fontSize:16,color:'#6B7280'}} tabIndex={-1}>
                {showPwd?'🙈':'👁️'}
              </button>
            </div>
          </div>

          <div>
            <label style={{fontSize:12,fontWeight:600,color:'#374151',marginBottom:4,display:'block'}}>Confirmar nova senha</label>
            <input
              type={showPwd?'text':'password'}
              value={confirm}
              onChange={e=>setConfirm(e.target.value)}
              placeholder="Digite de novo"
              style={{width:'100%',padding:'10px 12px',border:'1px solid #D1D5DB',borderRadius:6,fontSize:14}}
              disabled={loading}
              onKeyDown={e=>{if(e.key==='Enter')handleReset();}}
            />
          </div>

          <div style={{display:'flex',gap:10,justifyContent:'flex-end',marginTop:6}}>
            <button onClick={onClose} disabled={loading} style={{padding:'10px 20px',background:'#FFFFFF',color:'#374151',border:'1px solid #D1D5DB',borderRadius:6,fontSize:14,fontWeight:600,cursor:loading?'not-allowed':'pointer'}}>
              Cancelar
            </button>
            <button onClick={handleReset} disabled={loading||!password||password.length<6||password!==confirm} style={{padding:'10px 20px',background:loading?'#9CA3AF':'#DC2626',color:'#FFFFFF',border:'none',borderRadius:6,fontSize:14,fontWeight:700,cursor:loading?'not-allowed':'pointer',opacity:(!password||password.length<6||password!==confirm)?0.5:1}}>
              {loading?'⏳ Resetando...':'🔑 Resetar senha'}
            </button>
          </div>

          <div style={{fontSize:11,color:'#9CA3AF',textAlign:'center',marginTop:4}}>
            Ação registrada no audit_log. Apenas admins podem resetar senhas.
          </div>
        </div>
      </Modal>
    );
  }

  // Namespace
  window.ZNX = window.ZNX || {};
  window.ZNX.widgets = window.ZNX.widgets || {};
  window.ZNX.widgets.ResetPasswordModal = ResetPasswordModal;
  window.ResetPasswordModal = ResetPasswordModal;
})();
