import { useEffect, useState } from 'react'; import { useParams, useNavigate } from 'react-router-dom'; import { Card } from '../../components/ui/Card'; import { format } from 'date-fns'; interface ProvaStatus { id: string; status: 'PENDENTE' | 'PROCESSANDO' | 'CONCLUIDO' | 'ERRO'; fileName: string; checksumSha256: string; checksumSha512: string; checksumMd5: string; reportPath: string; error?: string; } export function ProvaStatus() { const { id } = useParams<{ id: string }>(); const [status, setStatus] = useState(null); const [error, setError] = useState(null); const navigate = useNavigate(); useEffect(() => { const checkStatus = async () => { try { const response = await fetch(`/api/provas/${id}/status`); // Verificar se a resposta foi bem-sucedida if (!response.ok) { const errorText = await response.text(); throw new Error(errorText || 'Erro ao buscar status'); } const data = await response.json(); setStatus(data); // Continuar verificando se ainda estiver processando if (data.status === 'PENDENTE' || data.status === 'PROCESSANDO') { setTimeout(checkStatus, 2000); } } catch (error) { console.error('Erro detalhado ao verificar status:', error); setError('Erro ao verificar status da prova'); } }; checkStatus(); }, [id]); const handleDownloadReport = () => { if (status && status.status === 'CONCLUIDO') { window.open(`/api/provas/relatorio/${status.checksumSha256}`, '_blank'); } }; const handleViewVerification = () => { if (status && status.checksumSha256) { navigate(`/provas/verificar/${status.checksumSha256}`); } }; if (error) return (
{error}
); if (!status) return (
Carregando...
); return (

Status da Validação

Arquivo

{status.fileName}

Status

{status.status === 'PENDENTE' ? 'Em fila de processamento' : status.status === 'PROCESSANDO' ? 'Processando...' : status.status === 'CONCLUIDO' ? 'Concluído' : 'Erro ao processar'}

{status.status === 'CONCLUIDO' && ( <>

Checksums

SHA-256: {status.checksumSha256}

SHA-512: {status.checksumSha512}

MD5: {status.checksumMd5}

)} {status.status === 'ERRO' && (

Erro ao processar arquivo:

{status.error}

)}
); }