// js/components/common/PerfilAdmin.jsx
// Perfil admin — edição de nome/usuário + troca de senha.
// Movido de index.html em Fase 5 do refactor (2026-04-29): L907-L975
// Deps runtime: sb (window.sb), verifyCurrentPasswordAuth, verifyPassword, hashPassword,
//               window.__ZNX_NEW_AUTH_ENABLED__
(function() {
  'use strict';
  const {useState} = React;

  // CÓPIA EXATA do index.html L907-L975
  function PerfilAdmin({user,allUsers,onSave}){
    const[form,setForm]=useState({name:user.name||'',username:user.username||'',senhaAtual:'',novaSenha:'',confirmarSenha:''});
    const[err,setErr]=useState('');
    const[ok,setOk]=useState('');
    // Look up the REAL password from allUsers (user.password is stripped by login())
    const realUser=(allUsers||[]).find(u=>u.username===user.username||u.id===user.id);
    const realPassword=realUser?realUser.password:user.password;
    async function salvar(){
      setErr('');setOk('');
      if(!form.name.trim())return setErr('Nome não pode ficar vazio.');
      if(!form.username.trim())return setErr('Usuário não pode ficar vazio.');
      // SAFETY: never allow undefined password to be saved (legado); novo auth: ausência de senha local é esperada
      let newPassword=realPassword;
      if(!newPassword&&!window.__ZNX_NEW_AUTH_ENABLED__){return setErr('Erro interno: senha não encontrada. Faça logout e login novamente.');}
      if(form.novaSenha||form.confirmarSenha||form.senhaAtual){
        // [AUTH FIX] novo auth: valida senha atual via Supabase Auth
        const authV=await verifyCurrentPasswordAuth(form.senhaAtual);
        if(authV){if(!authV.ok)return setErr(authV.err);}
        else{if(!await verifyPassword(form.senhaAtual,realPassword))return setErr('Senha atual incorreta.');}
        if(!form.novaSenha||form.novaSenha.length<6)return setErr('Senha precisa ter pelo menos 6 caracteres.');
        if(form.novaSenha!==form.confirmarSenha)return setErr('As senhas não coincidem.');
        // Bug 3 fix: sincroniza senha com Supabase Auth (bcrypt) antes do hash SHA-256 legado
        if(__ZNX_NEW_AUTH_ENABLED__){
          try{const{error:authErr}=await sb.auth.updateUser({password:form.novaSenha});if(authErr){setErr('Erro ao trocar senha: '+authErr.message);return;}}catch(e){setErr('Erro ao trocar senha. Tente novamente.');return;}
        }
        newPassword=await hashPassword(form.novaSenha);
      }
      const updated={...user,name:form.name.trim(),username:form.username.trim(),password:newPassword};
      onSave(updated);
      setOk('✅ Perfil atualizado com sucesso!');
      setForm(f=>({...f,senhaAtual:'',novaSenha:'',confirmarSenha:''}));
    }
    const inp=(label,field,type='text',placeholder='')=>(
      <div className="form-group">
        <label style={{fontWeight:600,fontSize:13,color:'#374151'}}>{label}</label>
        <input type={type} value={form[field]} placeholder={placeholder}
          onChange={e=>setForm(f=>({...f,[field]:e.target.value}))}
          style={{padding:'10px 12px',borderRadius:8,border:'1.5px solid #D1D5DB',fontSize:13,width:'100%',boxSizing:'border-box',outline:'none',fontFamily:"'Plus Jakarta Sans',sans-serif"}}
          onFocus={e=>e.target.style.borderColor='#1B2A4A'} onBlur={e=>e.target.style.borderColor='#D1D5DB'}/>
      </div>
    );
    return(
      <div style={{maxWidth:520,margin:'0 auto'}}>
        <div className="page-header"><div className="page-title">👤 Meu Perfil</div></div>
        <div className="card" style={{padding:28}}>
          <div style={{fontSize:11,color:'#9CA3AF',textTransform:'uppercase',letterSpacing:1,marginBottom:16}}>Informações pessoais</div>
          <div className="form-grid">
            {inp('Nome completo','name','text','Seu nome')}
            {inp('Usuário (login)','username','text','ex: admin')}
          </div>
          <div style={{fontSize:11,color:'#9CA3AF',textTransform:'uppercase',letterSpacing:1,margin:'20px 0 16px'}}>Alterar senha <span style={{fontWeight:400,textTransform:'none',color:'#C4C9D4'}}>(deixe em branco para não alterar)</span></div>
          <div className="form-grid">
            {inp('Senha atual','senhaAtual','password','')}
            {inp('Nova senha','novaSenha','password','Mínimo 4 caracteres')}
            {inp('Confirmar nova senha','confirmarSenha','password','')}
          </div>
          {err&&<div style={{color:'#DC2626',fontSize:13,marginTop:8,padding:'8px 12px',background:'#FEF2F2',borderRadius:8}}>⚠ {err}</div>}
          {ok&&<div style={{color:'#16A34A',fontSize:13,marginTop:8,padding:'8px 12px',background:'#F0FDF4',borderRadius:8}}>{ok}</div>}
          <div style={{marginTop:20,display:'flex',justifyContent:'flex-end'}}>
            <button className="btn-gold" onClick={salvar} style={{padding:'12px 32px',fontWeight:800,fontSize:14}}>Salvar alterações</button>
          </div>
        </div>
      </div>
    );
  }

  window.ZNX = window.ZNX || {};
  window.ZNX.components = window.ZNX.components || {};
  window.ZNX.components.PerfilAdmin = PerfilAdmin;
  window.PerfilAdmin = PerfilAdmin;

  window.ZNX.refactor_phase_5_loaded = window.ZNX.refactor_phase_5_loaded || {};
  window.ZNX.refactor_phase_5_loaded.PerfilAdmin = true;

})();
