import React, { useState, useEffect, useCallback } from 'react'; import { GraduationCap, CheckCircle2, XCircle, Clock, Settings, DollarSign, Users, RefreshCw, Loader2, Eye, CreditCard, AlertCircle, ChevronDown, ChevronUp, Banknote, Key, Percent, FileText } from 'lucide-react'; import { HybridBackend } from '../services/backend.ts'; import { useToast } from '../contexts/ToastContext.tsx'; import { useConfirm } from '../contexts/ConfirmContext.tsx'; import { PageHeader } from '../components/PageHeader.tsx'; // ─── Status ─────────────────────────────────────────────────────── const STATUS_STYLE: Record = { PENDENTE: { cls: 'bg-amber-100 text-amber-700', label: 'PENDENTE', icon: }, AGUARDANDO_PAGAMENTO:{ cls: 'bg-blue-100 text-blue-700', label: 'AGUARD. PAGAMENTO', icon: }, ATIVO: { cls: 'bg-green-100 text-green-700', label: 'ATIVO', icon: }, REJEITADO: { cls: 'bg-red-100 text-red-700', label: 'REJEITADO', icon: }, }; const TITULACAO_BADGE: Record = { ESPECIALISTA: 'bg-blue-100 text-blue-700', MESTRE: 'bg-purple-100 text-purple-700', DOUTOR: 'bg-indigo-100 text-indigo-700', PHD: 'bg-violet-100 text-violet-700', }; // ─── Card de candidatura ────────────────────────────────────────── const CandidaturaCard: React.FC<{ c: any; onAction: () => void }> = ({ c, onAction }) => { const toast = useToast(); const confirm = useConfirm(); const [open, setOpen] = useState(false); const [obs, setObs] = useState(''); const [loading, setLoading] = useState(false); const st = STATUS_STYLE[c.status] || STATUS_STYLE.PENDENTE; const action = async (status: string) => { if (status === 'REJEITADO' && !obs.trim()) { toast.error('INFORME O MOTIVO DA REJEIÇÃO.'); return; } setLoading(true); try { const res = await HybridBackend.updateStatusCandidatura(c.id, status, obs || undefined); if (!res.success) { toast.error(res.message || 'ERRO.'); return; } toast.success(`CANDIDATURA ${status === 'REJEITADO' ? 'REJEITADA' : 'APROVADA'}!`); onAction(); } catch { toast.error('ERRO.'); } finally { setLoading(false); } }; const confirmarPagamento = async () => { setLoading(true); try { const res = await HybridBackend.confirmarPagamentoCandidatura(c.id); if (!res.success) { toast.error(res.message || 'ERRO.'); return; } toast.success('PAGAMENTO CONFIRMADO — TUTOR ATIVADO!'); onAction(); } catch { toast.error('ERRO.'); } finally { setLoading(false); } }; return (
{open && (
{/* Dados */}

E-MAIL

{c.email || '—'}

TELEFONE

{c.telefone || '—'}

EXPERIÊNCIA

{c.anos_experiencia ? `${c.anos_experiencia} ANOS` : '—'}

INSTITUIÇÃO

{c.instituicao || '—'}

ANO CONCLUSÃO

{c.ano_conclusao || '—'}

PREÇO / CONSULTA

{c.preco_por_consulta ? `R$ ${Number(c.preco_por_consulta).toLocaleString('pt-BR', { minimumFractionDigits: 2 })}` : '—'}

{c.bio && (

BIO

{c.bio}

)} {c.portfolio_url && ( PORTFÓLIO → )} {/* Ações */} {c.status === 'PENDENTE' && (