"use client" import { useState, useEffect } from "react" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from "@/components/ui/dialog" import { toast } from "@/hooks/use-toast" import { FileText, Download, Eye, Calendar, User, X } from "lucide-react" import Sidebar from "@/components/Sidebar" interface Report { id: string title: string doctor: string date: string type: string status: "disponivel" | "pendente" description: string content: { patientInfo: { name: string age: number gender: string id: string } examDetails: { requestingDoctor: string examDate: string reportDate: string technique: string } findings: string conclusion: string recommendations?: string } } export default function ReportsPage() { const [reports, setReports] = useState([]) const [selectedReport, setSelectedReport] = useState(null) const [isViewModalOpen, setIsViewModalOpen] = useState(false) useEffect(() => { const mockReports: Report[] = [ { id: "1", title: "Exame de Sangue - Hemograma Completo", doctor: "Dr. João Silva", date: "2024-01-15", type: "Exame Laboratorial", status: "disponivel", description: "Hemograma completo com contagem de células sanguíneas", content: { patientInfo: { name: "Maria Silva Santos", age: 35, gender: "Feminino", id: "123.456.789-00", }, examDetails: { requestingDoctor: "Dr. João Silva - CRM 12345", examDate: "15/01/2024", reportDate: "15/01/2024", technique: "Análise automatizada com confirmação microscópica", }, findings: "Hemácias: 4.5 milhões/mm³ (VR: 4.0-5.2)\nHemoglobina: 13.2 g/dL (VR: 12.0-15.5)\nHematócrito: 40% (VR: 36-46)\nLeucócitos: 7.200/mm³ (VR: 4.000-11.000)\nPlaquetas: 280.000/mm³ (VR: 150.000-450.000)\n\nFórmula leucocitária:\n- Neutrófilos: 65% (VR: 50-70%)\n- Linfócitos: 28% (VR: 20-40%)\n- Monócitos: 5% (VR: 2-8%)\n- Eosinófilos: 2% (VR: 1-4%)", conclusion: "Hemograma dentro dos parâmetros normais. Não foram observadas alterações significativas na série vermelha, branca ou plaquetária.", recommendations: "Manter acompanhamento médico regular. Repetir exame conforme orientação médica.", }, }, { id: "2", title: "Radiografia do Tórax", doctor: "Dra. Maria Santos", date: "2024-01-10", type: "Exame de Imagem", status: "disponivel", description: "Radiografia PA e perfil do tórax", content: { patientInfo: { name: "Maria Silva Santos", age: 35, gender: "Feminino", id: "123.456.789-00", }, examDetails: { requestingDoctor: "Dra. Maria Santos - CRM 67890", examDate: "10/01/2024", reportDate: "10/01/2024", technique: "Radiografia digital PA e perfil", }, findings: "Campos pulmonares livres, sem sinais de consolidação ou derrame pleural. Silhueta cardíaca dentro dos limites normais. Estruturas ósseas íntegras. Diafragmas em posição normal.", conclusion: "Radiografia de tórax sem alterações patológicas evidentes.", recommendations: "Correlacionar com quadro clínico. Acompanhamento conforme indicação médica.", }, }, { id: "3", title: "Eletrocardiograma", doctor: "Dr. Carlos Oliveira", date: "2024-01-08", type: "Exame Cardiológico", status: "pendente", description: "ECG de repouso para avaliação cardíaca", content: { patientInfo: { name: "Maria Silva Santos", age: 35, gender: "Feminino", id: "123.456.789-00", }, examDetails: { requestingDoctor: "Dr. Carlos Oliveira - CRM 54321", examDate: "08/01/2024", reportDate: "", technique: "ECG de repouso", }, findings: "", conclusion: "", recommendations: "", }, }, { id: "4", title: "Ultrassom Abdominal", doctor: "Dra. Ana Costa", date: "2024-01-05", type: "Exame de Imagem", status: "disponivel", description: "Ultrassonografia do abdome total", content: { patientInfo: { name: "Maria Silva Santos", age: 35, gender: "Feminino", id: "123.456.789-00", }, examDetails: { requestingDoctor: "Dra. Ana Costa - CRM 98765", examDate: "05/01/2024", reportDate: "05/01/2024", technique: "Ultrassom convencional", }, findings: "Viscerais bem posicionadas. Rim direito e esquerdo com contornos normais. Vesícula com volume dentro do normal.", conclusion: "Ultrassom abdominal sem alterações patológicas evidentes.", recommendations: "Acompanhamento conforme indicação médica.", }, }, ] setReports(mockReports) }, []) const handleViewReport = (reportId: string) => { const report = reports.find((r) => r.id === reportId) if (report) { setSelectedReport(report) setIsViewModalOpen(true) } } const handleDownloadReport = async (reportId: string) => { const report = reports.find((r) => r.id === reportId) if (!report) return try { // Simular loading toast({ title: "Preparando download...", description: "Gerando PDF do laudo médico", }) // Criar conteúdo HTML do laudo para conversão em PDF const htmlContent = ` Laudo Médico - ${report.title}

LAUDO MÉDICO

${report.title}

Tipo: ${report.type}

DADOS DO PACIENTE
Nome: ${report.content.patientInfo.name}
Idade: ${report.content.patientInfo.age} anos
Sexo: ${report.content.patientInfo.gender}
CPF: ${report.content.patientInfo.id}
DETALHES DO EXAME
Médico Solicitante: ${report.content.examDetails.requestingDoctor}
Data do Exame: ${report.content.examDetails.examDate}
Data do Laudo: ${report.content.examDetails.reportDate}
Técnica: ${report.content.examDetails.technique}
ACHADOS
${report.content.findings}
CONCLUSÃO
${report.content.conclusion}
${ report.content.recommendations ? `
RECOMENDAÇÕES
${report.content.recommendations}
` : "" } ` // Criar blob com o conteúdo HTML const blob = new Blob([htmlContent], { type: "text/html" }) const url = URL.createObjectURL(blob) // Criar link temporário para download const link = document.createElement("a") link.href = url link.download = `laudo-${report.title.replace(/[^a-zA-Z0-9]/g, "-").toLowerCase()}-${report.date}.html` document.body.appendChild(link) link.click() document.body.removeChild(link) // Limpar URL temporária URL.revokeObjectURL(url) toast({ title: "Download concluído!", description: "O laudo foi baixado com sucesso", }) } catch (error) { console.error("Erro ao baixar laudo:", error) toast({ title: "Erro no download", description: "Não foi possível baixar o laudo. Tente novamente.", variant: "destructive", }) } } const handleCloseModal = () => { setIsViewModalOpen(false) setSelectedReport(null) } const availableReports = reports.filter((report) => report.status === "disponivel") const pendingReports = reports.filter((report) => report.status === "pendente") return (

Meus Laudos

Visualize e baixe seus laudos médicos e resultados de exames

Total de Laudos
{reports.length}
Disponíveis
{availableReports.length}
Pendentes
{pendingReports.length}
{availableReports.length > 0 && (

Laudos Disponíveis

{availableReports.map((report) => (
{report.title} {report.doctor} {new Date(report.date).toLocaleDateString("pt-BR")}
{report.type}

{report.description}

))}
)} {pendingReports.length > 0 && (

Laudos Pendentes

{pendingReports.map((report) => (
{report.title} {report.doctor} {new Date(report.date).toLocaleDateString("pt-BR")}
Pendente

{report.description}

Laudo em processamento. Você será notificado quando estiver disponível.

))}
)} {reports.length === 0 && (

Nenhum laudo encontrado

Seus laudos médicos aparecerão aqui após a realização de exames.

)}
{selectedReport?.title} {selectedReport?.type} - {selectedReport?.doctor}
{selectedReport && (
Dados do Paciente

Nome

{selectedReport.content.patientInfo.name}

Idade

{selectedReport.content.patientInfo.age} anos

Sexo

{selectedReport.content.patientInfo.gender}

CPF

{selectedReport.content.patientInfo.id}

Detalhes do Exame

Médico Solicitante

{selectedReport.content.examDetails.requestingDoctor}

Data do Exame

{selectedReport.content.examDetails.examDate}

Data do Laudo

{selectedReport.content.examDetails.reportDate}

Técnica

{selectedReport.content.examDetails.technique}

Achados
{selectedReport.content.findings}
Conclusão

{selectedReport.content.conclusion}

{selectedReport.content.recommendations && ( Recomendações

{selectedReport.content.recommendations}

)}
)}
) }