import React, { useState, useEffect } from 'react'; import { useParams, Link } from 'react-router-dom'; import { format } from 'date-fns'; import { ptBR } from 'date-fns/locale'; interface SessionData { id: string; startTime: string; endTime?: string; ipAddress: string; dnsInfo: string; userAgent: string; geolocation?: { latitude: number; longitude: number; }; screenshots: string[]; videoPath?: string; metadata: any; } export const SessionReport: React.FC = () => { const { sessionId } = useParams<{ sessionId: string }>(); const [session, setSession] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { const fetchSession = async () => { try { const response = await fetch(`/api/sessions/${sessionId}`); if (!response.ok) { throw new Error('Sessão não encontrada'); } const data = await response.json(); setSession(data.session); } catch (error) { console.error('Erro ao buscar sessão:', error); setError(error.message); } finally { setLoading(false); } }; if (sessionId) { fetchSession(); } }, [sessionId]); const formatDuration = (start: string, end?: string) => { if (!end) return 'Em andamento'; const startTime = new Date(start); const endTime = new Date(end); const diffMs = endTime.getTime() - startTime.getTime(); const hours = Math.floor(diffMs / (1000 * 60 * 60)); const minutes = Math.floor((diffMs % (1000 * 60 * 60)) / (1000 * 60)); const seconds = Math.floor((diffMs % (1000 * 60)) / 1000); return `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`; }; if (loading) { return (
); } if (error || !session) { return (
Erro ao carregar sessão

{error || 'Sessão não encontrada'}

Nova Sessão
); } return (
{/* Header */}

Relatório de Sessão de Coleta de Prova

ID da Sessão: {session.id}

{/* Resumo da sessão */}

Resumo da Sessão

Data/Hora de Início

{format(new Date(session.startTime), 'dd/MM/yyyy HH:mm:ss', { locale: ptBR })}

{session.endTime && (

Data/Hora de Fim

{format(new Date(session.endTime), 'dd/MM/yyyy HH:mm:ss', { locale: ptBR })}

)}

Duração

{formatDuration(session.startTime, session.endTime)}

Screenshots Capturados

{session.screenshots.length}

{/* Informações de rede */}

Informações de Rede

Endereço IP

{session.ipAddress}

DNS Reverso

{session.dnsInfo}

User-Agent

{session.userAgent}

{/* Geolocalização */} {session.geolocation && (

Geolocalização

Latitude

{session.geolocation.latitude}

Longitude

{session.geolocation.longitude}

)} {/* Metadados adicionais */}

Metadados do Sistema

                {JSON.stringify(session.metadata, null, 2)}
              
{/* Ações */}
Baixar Relatório PDF {session.videoPath && ( )} Nova Sessão
Relatório gerado pelo sistema AdvX Provas - Coleta de Evidências Digitais
); }; export default SessionReport;