"use client" import { useEffect, useState } from "react" import { useRouter } from "next/navigation" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { Badge } from "@/components/ui/badge" import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table" import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog" import { Label } from "@/components/ui/label" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { Plus, Search, Trash2, Loader2, RefreshCw, Pencil } from "lucide-react" import { usersApi, type ApiUser } from "@/lib/api" import { getCurrentUser } from "@/lib/auth" import { toast } from "sonner" export default function AdminUsersPage() { const router = useRouter() const [users, setUsers] = useState([]) const [loading, setLoading] = useState(true) const [searchTerm, setSearchTerm] = useState("") const [isDialogOpen, setIsDialogOpen] = useState(false) const [creating, setCreating] = useState(false) const [editingId, setEditingId] = useState(null) const [formData, setFormData] = useState({ name: "", email: "", password: "", role: "jobSeeker", }) useEffect(() => { const user = getCurrentUser() if (!user || (!user.roles?.includes("superadmin") && user.role !== "admin")) { router.push("/dashboard") return } loadUsers() }, [router]) const loadUsers = async () => { try { setLoading(true) const data = await usersApi.list() setUsers(data || []) } catch (error) { console.error("Error loading users:", error) toast.error("Erro ao carregar usuários") } finally { setLoading(false) } } const handleCreate = async () => { // This is now handled by handleSubmit handleSubmit() } const handleEditClick = (user: ApiUser) => { setEditingId(user.id) setFormData({ name: user.name, email: user.email, password: "", // Password optional for update role: user.role, }) setIsDialogOpen(true) } const handleSubmit = async () => { try { setCreating(true) if (editingId) { // Update existing user const updateData = { ...formData } if (!updateData.password) delete (updateData as any).password await usersApi.update(editingId, updateData) toast.success("Usuário atualizado com sucesso!") } else { // Create new user await usersApi.create(formData) toast.success("Usuário criado com sucesso!") } setIsDialogOpen(false) setFormData({ name: "", email: "", password: "", role: "jobSeeker" }) setEditingId(null) loadUsers() } catch (error) { console.error("Error saving user:", error) toast.error("Erro ao salvar usuário") } finally { setCreating(false) } } const handleDelete = async (id: string) => { if (!confirm("Tem certeza que deseja excluir este usuário?")) return try { await usersApi.delete(id) toast.success("Usuário excluído!") loadUsers() } catch (error) { console.error("Error deleting user:", error) toast.error("Erro ao excluir usuário") } } const filteredUsers = users.filter( (user) => user.name?.toLowerCase().includes(searchTerm.toLowerCase()) || user.email?.toLowerCase().includes(searchTerm.toLowerCase()) ) const getRoleBadge = (role: string) => { const labels: Record = { superadmin: "Super Admin", companyAdmin: "Admin Empresa", recruiter: "Recrutador", jobSeeker: "Candidato", admin: "Admin", company: "Empresa" } const colors: Record = { superadmin: "destructive", companyAdmin: "default", recruiter: "secondary", jobSeeker: "outline", admin: "destructive", company: "default" } const label = labels[role] || role || "Usuário" return {label} } return (
{/* Header */}

Gestão de Usuários

Gerencie todos os usuários da plataforma

{ setIsDialogOpen(open) if (!open) { setEditingId(null) setFormData({ name: "", email: "", password: "", role: "jobSeeker" }) } }}> {editingId ? "Editar Usuário" : "Criar Novo Usuário"} {editingId ? "Atualize os dados do usuário" : "Preencha os dados do novo usuário"}
setFormData({ ...formData, name: e.target.value })} placeholder="Nome completo" />
setFormData({ ...formData, email: e.target.value })} placeholder="email@exemplo.com" />
setFormData({ ...formData, password: e.target.value })} placeholder={editingId ? "Deixe em branco para manter" : "Senha segura"} />
{/* Stats */}
Total de Usuários {users.length} Admins {users.filter((u) => u.role === "superadmin" || u.role === "companyAdmin").length} Recrutadores {users.filter((u) => u.role === "recruiter").length} Candidatos {users.filter((u) => u.role === "jobSeeker").length}
{/* Table */}
setSearchTerm(e.target.value)} className="pl-10" />
{loading ? (
) : ( Nome Email Função Status Data Criação Ações {filteredUsers.length === 0 ? ( Nenhum usuário encontrado ) : ( filteredUsers.map((user) => ( {user.name} {user.email} {getRoleBadge(user.role)} {user.status === "active" ? "Ativo" : user.status} {user.created_at ? new Date(user.created_at).toLocaleDateString("pt-BR") : "-"}
)) )}
)}
) }