'use client'; import { useEffect, useState, useCallback } from 'react'; import { api } from '@/lib/api'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { toast } from 'sonner'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs'; import Link from 'next/link'; import { ShieldCheck, ShieldAlert, Eye } from 'lucide-react'; interface Professional { id: string; user_id: string; is_active: boolean; profession?: string; identification?: string; rethus_code?: string; rethus_validated?: boolean; rate?: number; users?: { id: string; name: string; email?: string; phone?: string }; } export default function ProfessionalsPage() { const [approved, setApproved] = useState([]); const [pending, setPending] = useState([]); const [rejected, setRejected] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const load = useCallback(() => { setLoading(true); setError(null); Promise.all([ api.get<{ data: Professional[]; meta: any }>('/professionals').then((r) => r.data).catch(() => [] as Professional[]), api.get<{ data: Professional[]; meta: any }>('/professionals/pending').then((r) => r.data).catch(() => [] as Professional[]), api.get<{ data: Professional[]; meta: any }>('/professionals/rejected').then((r) => r.data).catch(() => [] as Professional[]), ]) .then(([a, p, r]) => { setApproved(a); setPending(p); setRejected(r); }) .catch(() => setError('Error al cargar los profesionales')) .finally(() => setLoading(false)); }, []); useEffect(() => { load(); }, [load]); const approve = async (id: string) => { await api.post(`/professionals/${id}/approve`); toast.success('Profesional aprobado'); load(); }; const deny = async (id: string) => { await api.post(`/professionals/${id}/deny`); toast.success('Solicitud rechazada'); load(); }; const reactivate = async (id: string) => { await api.post(`/professionals/${id}/set-pending`); toast.success('Movido a revisión'); load(); }; return (

Profesionales

{error ? (

{error}

) : ( Activos ({approved.length}) Pendientes ({pending.length}) No aprobados ({rejected.length}) Nombre Profesión Identificación Tarifa Estado Acción {loading ? ( Cargando... ) : approved.length === 0 ? ( Sin resultados ) : ( approved.map((p) => ( {p.users?.name} {p.profession || '—'} {p.identification || '—'} {p.rate != null ? `$${p.rate}` : '—'} Activo )) )}
Nombre Email Teléfono RETHUS Acción {loading ? ( Cargando... ) : pending.length === 0 ? ( Sin resultados ) : ( pending.map((p) => ( {p.users?.name} {p.users?.email || '—'} {p.users?.phone || '—'} {p.rethus_code ? (
{p.rethus_validated ? : } {p.rethus_code}
) : ( No aplica )}
)) )}
Nombre Email Teléfono RETHUS Acción {loading ? ( Cargando... ) : rejected.length === 0 ? ( Sin resultados ) : ( rejected.map((p) => ( {p.users?.name} {p.users?.email || '—'} {p.users?.phone || '—'} {p.rethus_code ? (
{p.rethus_validated ? : } {p.rethus_code}
) : ( No aplica )}
)) )}
)}
); }