"use client"; // import { useAuth } from '@/hooks/useAuth' // removido duplicado import { useState } from "react"; import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter, } from "@/components/ui/dialog"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Textarea } from "@/components/ui/textarea"; import { Avatar, AvatarFallback } from "@/components/ui/avatar"; import { User, LogOut, Calendar, FileText, MessageCircle, UserCog, Home, Clock, FolderOpen, ChevronLeft, ChevronRight, MapPin, Stethoscope, } from "lucide-react"; import { SimpleThemeToggle } from "@/components/simple-theme-toggle"; import Link from "next/link"; import ProtectedRoute from "@/components/ProtectedRoute"; import { useAuth } from "@/hooks/useAuth"; // Simulação de internacionalização básica const strings = { dashboard: "Dashboard", consultas: "Consultas", exames: "Exames & Laudos", mensagens: "Mensagens", perfil: "Perfil", sair: "Sair", proximaConsulta: "Próxima Consulta", ultimosExames: "Últimos Exames", mensagensNaoLidas: "Mensagens Não Lidas", agendar: "Agendar", reagendar: "Reagendar", cancelar: "Cancelar", detalhes: "Detalhes", adicionarCalendario: "Adicionar ao calendário", visualizarLaudo: "Visualizar Laudo", download: "Download", compartilhar: "Compartilhar", inbox: "Caixa de Entrada", enviarMensagem: "Enviar Mensagem", salvar: "Salvar", editarPerfil: "Editar Perfil", consentimentos: "Consentimentos", notificacoes: "Preferências de Notificação", vazio: "Nenhum dado encontrado.", erro: "Ocorreu um erro. Tente novamente.", carregando: "Carregando...", sucesso: "Salvo com sucesso!", erroSalvar: "Erro ao salvar.", }; export default function PacientePage() { const { logout, user } = useAuth(); const [tab, setTab] = useState< "dashboard" | "consultas" | "exames" | "mensagens" | "perfil" >("dashboard"); // Simulação de loaders, empty states e erro const [loading, setLoading] = useState(false); const [error, setError] = useState(""); const [toast, setToast] = useState<{ type: "success" | "error"; msg: string; } | null>(null); // Acessibilidade: foco visível e ordem de tabulação garantidos por padrão nos botões e inputs const handleLogout = async () => { setLoading(true); setError(""); try { await logout(); } catch { setError(strings.erro); } finally { setLoading(false); } }; // Estado para edição do perfil const [isEditingProfile, setIsEditingProfile] = useState(false); const [profileData, setProfileData] = useState({ nome: "Maria Silva Santos", email: user?.email || "paciente@example.com", telefone: "(11) 99999-9999", endereco: "Rua das Flores, 123", cidade: "São Paulo", cep: "01234-567", biografia: "Paciente desde 2020. Histórico de consultas e exames regulares.", }); const handleProfileChange = (field: string, value: string) => { setProfileData((previous) => ({ ...previous, [field]: value })); }; const handleSaveProfile = () => { setIsEditingProfile(false); setToast({ type: "success", msg: strings.sucesso }); }; const handleCancelEdit = () => { setIsEditingProfile(false); }; function DashboardCards() { return (
{strings.proximaConsulta} 12/10/2025 {strings.ultimosExames} 2 {strings.mensagensNaoLidas} 1
); } // Consultas fictícias const [currentDate, setCurrentDate] = useState(new Date()); const consultasFicticias = [ { id: 1, medico: "Dr. Carlos Andrade", especialidade: "Cardiologia", local: "Clínica Coração Feliz", data: new Date().toISOString().split("T")[0], hora: "09:00", status: "Confirmada", }, { id: 2, medico: "Dra. Fernanda Lima", especialidade: "Dermatologia", local: "Clínica Pele Viva", data: new Date().toISOString().split("T")[0], hora: "14:30", status: "Pendente", }, { id: 3, medico: "Dr. João Silva", especialidade: "Ortopedia", local: "Hospital Ortopédico", data: (() => { let d = new Date(); d.setDate(d.getDate() + 1); return d.toISOString().split("T")[0]; })(), hora: "11:00", status: "Cancelada", }, ]; function formatDatePt(dateString: string) { const date = new Date(dateString); return date.toLocaleDateString("pt-BR", { weekday: "long", day: "numeric", month: "long", year: "numeric", }); } function navigateDate(direction: "prev" | "next") { const newDate = new Date(currentDate); newDate.setDate(newDate.getDate() + (direction === "next" ? 1 : -1)); setCurrentDate(newDate); } function goToToday() { setCurrentDate(new Date()); } const todayString = currentDate.toISOString().split("T")[0]; const consultasDoDia = consultasFicticias.filter( (c) => c.data === todayString, ); function Consultas() { return (

Minhas Consultas

{/* Navegação de Data */}

{formatDatePt(todayString)}

{consultasDoDia.length} consulta {consultasDoDia.length !== 1 ? "s" : ""} agendada {consultasDoDia.length !== 1 ? "s" : ""}
{/* Lista de Consultas do Dia */}
{consultasDoDia.length === 0 ? (

Nenhuma consulta agendada para este dia

Você pode agendar uma nova consulta

) : ( consultasDoDia.map((consulta) => (
{consulta.medico}
{consulta.especialidade} • {consulta.local}
{consulta.hora}
{consulta.status}
{consulta.status !== "Cancelada" && ( )} {consulta.status !== "Cancelada" && ( )}
)) )}
); } // Exames e laudos fictícios const examesFicticios = [ { id: 1, nome: "Hemograma Completo", data: "2025-09-20", status: "Disponível", prontuario: "Paciente apresenta hemograma dentro dos padrões de normalidade. Sem alterações significativas.", }, { id: 2, nome: "Raio-X de Tórax", data: "2025-08-10", status: "Disponível", prontuario: "Exame radiológico sem evidências de lesões pulmonares. Estruturas cardíacas normais.", }, { id: 3, nome: "Eletrocardiograma", data: "2025-07-05", status: "Disponível", prontuario: "Ritmo sinusal, sem arritmias. Exame dentro da normalidade.", }, ]; const laudosFicticios = [ { id: 1, nome: "Laudo Hemograma Completo", data: "2025-09-21", status: "Assinado", laudo: "Hemoglobina, hematócrito, leucócitos e plaquetas dentro dos valores de referência. Sem anemias ou infecções detectadas.", }, { id: 2, nome: "Laudo Raio-X de Tórax", data: "2025-08-11", status: "Assinado", laudo: "Radiografia sem alterações. Parênquima pulmonar preservado. Ausência de derrame pleural.", }, { id: 3, nome: "Laudo Eletrocardiograma", data: "2025-07-06", status: "Assinado", laudo: "ECG normal. Não há sinais de isquemia ou sobrecarga.", }, ]; const [exameSelecionado, setExameSelecionado] = useState< null | (typeof examesFicticios)[0] >(null); const [laudoSelecionado, setLaudoSelecionado] = useState< null | (typeof laudosFicticios)[0] >(null); function ExamesLaudos() { return (

Exames

Meus Exames

{examesFicticios.map((exame) => (
{exame.nome}
Data: {new Date(exame.data).toLocaleDateString("pt-BR")}
))}

Laudos

Meus Laudos

{laudosFicticios.map((laudo) => (
{laudo.nome}
Data: {new Date(laudo.data).toLocaleDateString("pt-BR")}
))}
{/* Modal Prontuário Exame */} !open && setExameSelecionado(null)} > Prontuário do Exame {exameSelecionado && ( <>
{exameSelecionado.nome}
Data:{" "} {new Date(exameSelecionado.data).toLocaleDateString( "pt-BR", )}
{exameSelecionado.prontuario}
)}
{/* Modal Visualizar Laudo */} !open && setLaudoSelecionado(null)} > Laudo Médico {laudoSelecionado && ( <>
{laudoSelecionado.nome}
Data:{" "} {new Date(laudoSelecionado.data).toLocaleDateString( "pt-BR", )}
{laudoSelecionado.laudo}
)}
); } // Mensagens fictícias recebidas do médico const mensagensFicticias = [ { id: 1, medico: "Dr. Carlos Andrade", data: "2025-10-06T15:30:00", conteudo: "Olá Maria, seu exame de hemograma está normal. Parabéns por manter seus exames em dia!", lida: false, }, { id: 2, medico: "Dra. Fernanda Lima", data: "2025-09-21T10:15:00", conteudo: "Maria, seu laudo de Raio-X já está disponível no sistema. Qualquer dúvida, estou à disposição.", lida: true, }, { id: 3, medico: "Dr. João Silva", data: "2025-08-12T09:00:00", conteudo: "Bom dia! Lembre-se de agendar seu retorno para acompanhamento da ortopedia.", lida: true, }, ]; function Mensagens() { return (

Mensagens Recebidas

{mensagensFicticias.length === 0 ? (

Nenhuma mensagem recebida

Você ainda não recebeu mensagens dos seus médicos.

) : ( mensagensFicticias.map((message) => (
{message.medico} {!message.lida && ( Nova )}
{new Date(message.data).toLocaleString("pt-BR")}
{message.conteudo}
)) )}
); } function Perfil() { return (

Meu Perfil

{!isEditingProfile ? ( ) : (
)}
{/* Informações Pessoais */}

Informações Pessoais

{profileData.nome}

Este campo não pode ser alterado
{isEditingProfile ? ( handleProfileChange("email", e.target.value)} /> ) : (

{profileData.email}

)}
{isEditingProfile ? ( handleProfileChange("telefone", e.target.value) } /> ) : (

{profileData.telefone}

)}
{/* Endereço e Contato */}

Endereço

{isEditingProfile ? ( handleProfileChange("endereco", e.target.value) } /> ) : (

{profileData.endereco}

)}
{isEditingProfile ? ( handleProfileChange("cidade", e.target.value) } /> ) : (

{profileData.cidade}

)}
{isEditingProfile ? ( handleProfileChange("cep", e.target.value)} /> ) : (

{profileData.cep}

)}
{isEditingProfile ? (