"use client"; import type React from "react"; import Link from "next/link"; import { useState, useEffect } from "react"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table"; import { useParams } from "next/navigation"; import { toast } from "@/hooks/use-toast"; // [TIPAGEM] Interfaces importadas dos serviços import { pacientesApi, Patient } from "@/services/pacientesApi"; import { relatoriosApi, Report } from "@/services/relatoriosApi"; export default function LaudosPage() { const params = useParams(); const patientId = params.id as string; // [ESTADO] Gerenciamento de estado robusto const [patient, setPatient] = useState(null); const [laudos, setLaudos] = useState([]); const [isLoading, setIsLoading] = useState(true); const [error, setError] = useState(null); const [currentPage, setCurrentPage] = useState(1); const [itemsPerPage] = useState(5); // [API] Lógica de busca de dados corrigida useEffect(() => { if (patientId) { const fetchPatientAndLaudos = async () => { setIsLoading(true); setError(null); try { const [patientData, allLaudosData] = await Promise.all([ pacientesApi.getById(patientId), relatoriosApi.list() // Corrigido: Chama a função sem argumentos ]); // Filtra os laudos para o paciente específico no lado do cliente const patientLaudos = allLaudosData.filter(laudo => laudo.patient_id === patientId); setPatient(patientData); setLaudos(patientLaudos); } catch (err: any) { const errorMessage = "Falha ao buscar os dados do paciente e seus laudos."; setError(errorMessage); toast({ title: "Erro", description: err.message || errorMessage, variant: "destructive", }); } finally { setIsLoading(false); } }; fetchPatientAndLaudos(); } }, [patientId]); const indexOfLastItem = currentPage * itemsPerPage; const indexOfFirstItem = indexOfLastItem - itemsPerPage; const currentItems = laudos.slice(indexOfFirstItem, indexOfLastItem); const totalPages = Math.ceil(laudos.length / itemsPerPage); const paginate = (pageNumber: number) => setCurrentPage(pageNumber); // [UI] Feedback Visual para Carregamento e Erro if (isLoading) { return
Carregando...
; } if (error) { return
{error}
; } return (
{patient && ( Informações do Paciente

Nome: {patient.full_name}

Email: {patient.email}

Telefone: {patient.phone_mobile}

)} Laudos do Paciente Nº do Pedido Exame Diagnóstico Status Data de Criação Ações {currentItems.length > 0 ? ( currentItems.map((laudo) => ( {laudo.order_number} {laudo.exam} {laudo.diagnosis} {laudo.status} {new Date(laudo.created_at).toLocaleDateString()} )) ) : ( Nenhum laudo encontrado. )}
{totalPages > 1 && (
{Array.from({ length: totalPages }, (_, i) => ( ))}
)}
); }