import { useState, useEffect } from 'react' import { Users, Search, Plus, Edit2, Trash2, Shield, X, Loader2, Mail, User, CheckCircle2, XCircle, Key } from 'lucide-react' import api from '../services/api' interface Usuario { id: number; nome: string; email: string; perfil: string; perfil_id: number; ativo?: boolean; ultimo_acesso?: string; } const perfilConfig: Record = { 'admin': { label: 'Administrador', color: '#E65100', icon: }, 'administrador': { label: 'Administrador', color: '#E65100', icon: }, 'gestor': { label: 'Gestor', color: '#1A237E', icon: }, 'financeiro': { label: 'Financeiro', color: '#2E7D32', icon: }, 'solicitante': { label: 'Solicitante', color: '#7B1FA2', icon: }, } const mockUsuarios: Usuario[] = [ { id: 1, nome: 'Admin Sistema', email: 'admin@hefesto.com', perfil: 'Administrador', perfil_id: 1, ativo: true, ultimo_acesso: '2024-01-16 14:30' }, { id: 2, nome: 'João Santos', email: 'joao.santos@hefesto.com', perfil: 'Gestor', perfil_id: 2, ativo: true, ultimo_acesso: '2024-01-16 10:15' }, { id: 3, nome: 'Ana Oliveira', email: 'ana.oliveira@hefesto.com', perfil: 'Financeiro', perfil_id: 3, ativo: true, ultimo_acesso: '2024-01-15 16:45' }, { id: 4, nome: 'Maria Silva', email: 'maria.silva@hefesto.com', perfil: 'Solicitante', perfil_id: 4, ativo: true, ultimo_acesso: '2024-01-16 09:00' }, { id: 5, nome: 'Carlos Lima', email: 'carlos.lima@hefesto.com', perfil: 'Solicitante', perfil_id: 4, ativo: false, ultimo_acesso: '2024-01-10 11:30' }, ] export default function Usuarios() { const [loading, setLoading] = useState(true) const [usuarios, setUsuarios] = useState([]) const [searchTerm, setSearchTerm] = useState('') const [filterPerfil, setFilterPerfil] = useState('todos') const [showModal, setShowModal] = useState(false) const [selectedUser, setSelectedUser] = useState(null) const [formData, setFormData] = useState({ nome: '', email: '', perfil_id: 4, senha: '' }) useEffect(() => { // Simulate loading setTimeout(() => { setUsuarios(mockUsuarios) setLoading(false) }, 500) }, []) const filteredUsuarios = usuarios.filter(user => { const matchesSearch = user.nome.toLowerCase().includes(searchTerm.toLowerCase()) || user.email.toLowerCase().includes(searchTerm.toLowerCase()) const matchesPerfil = filterPerfil === 'todos' || user.perfil.toLowerCase() === filterPerfil return matchesSearch && matchesPerfil }) const handleOpenModal = (user?: Usuario) => { if (user) { setSelectedUser(user) setFormData({ nome: user.nome, email: user.email, perfil_id: user.perfil_id, senha: '' }) } else { setSelectedUser(null) setFormData({ nome: '', email: '', perfil_id: 4, senha: '' }) } setShowModal(true) } const handleCloseModal = () => { setShowModal(false) setSelectedUser(null) setFormData({ nome: '', email: '', perfil_id: 4, senha: '' }) } const handleSubmit = (e: React.FormEvent) => { e.preventDefault() // Mock save if (selectedUser) { setUsuarios(usuarios.map(u => u.id === selectedUser.id ? { ...u, ...formData, perfil: getPerfilLabel(formData.perfil_id) } : u)) } else { const newUser: Usuario = { id: Date.now(), ...formData, perfil: getPerfilLabel(formData.perfil_id), ativo: true, ultimo_acesso: 'Nunca' } setUsuarios([...usuarios, newUser]) } handleCloseModal() } const getPerfilLabel = (id: number) => { const perfis: Record = { 1: 'Administrador', 2: 'Gestor', 3: 'Financeiro', 4: 'Solicitante' } return perfis[id] || 'Solicitante' } const getPerfilConfig = (perfil: string) => { const key = perfil.toLowerCase() return perfilConfig[key] || { label: perfil, color: '#757575', icon: } } if (loading) { return (
) } return (
{/* Header */}

Usuários

Gerencie os usuários do sistema

{/* Stats */}

Total

{usuarios.length}

Ativos

{usuarios.filter(u => u.ativo !== false).length}

Admins

{usuarios.filter(u => u.perfil.toLowerCase().includes('admin')).length}

Inativos

{usuarios.filter(u => u.ativo === false).length}

{/* Filters */}
setSearchTerm(e.target.value)} className="input-field pl-12" />
{['todos', 'administrador', 'gestor', 'financeiro', 'solicitante'].map((filter) => ( ))}
{/* Table */}
{filteredUsuarios.map((user) => { const config = getPerfilConfig(user.perfil) return ( ) })}
Usuário E-mail Perfil Último Acesso Status Ações
{user.nome.charAt(0).toUpperCase()}
{user.nome}
{user.email}
{config.icon} {config.label} {user.ultimo_acesso} {user.ativo !== false ? ( Ativo ) : ( Inativo )}
{filteredUsuarios.length === 0 && (

Nenhum usuário encontrado

)}
{/* Modal */} {showModal && (

{selectedUser ? 'Editar Usuário' : 'Novo Usuário'}

setFormData({ ...formData, nome: e.target.value })} className="input-field" placeholder="Nome completo" required />
setFormData({ ...formData, email: e.target.value })} className="input-field" placeholder="email@exemplo.com" required />
{!selectedUser && (
setFormData({ ...formData, senha: e.target.value })} className="input-field" placeholder="••••••" required={!selectedUser} />
)}
)}
) }