"use client"; import React, { useState } from "react"; import Link from "next/link"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Textarea } from "@/components/ui/textarea"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Avatar, AvatarImage, AvatarFallback } from "@/components/ui/avatar" import { User, FolderOpen, X, Users, MessageSquare, ClipboardList, Plus, Edit, Trash2 } from "lucide-react" import { Calendar as CalendarIcon, FileText, Settings } from "lucide-react"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from "@/components/ui/tooltip"; // Importações do FullCalendar import dynamic from "next/dynamic"; import dayGridPlugin from "@fullcalendar/daygrid"; import timeGridPlugin from "@fullcalendar/timegrid"; import interactionPlugin from "@fullcalendar/interaction"; import ptBrLocale from "@fullcalendar/core/locales/pt-br"; const FullCalendar = dynamic(() => import("@fullcalendar/react"), { ssr: false, }); const pacientes = [ { nome: "Ana Souza", cpf: "123.456.789-00", idade: 42, statusLaudo: "Finalizado" }, { nome: "Bruno Lima", cpf: "987.654.321-00", idade: 33, statusLaudo: "Pendente" }, { nome: "Carla Menezes", cpf: "111.222.333-44", idade: 67, statusLaudo: "Rascunho" }, ]; const medico = { nome: "Dr. Carlos Andrade", identificacao: "CRM 000000 • Cardiologia", fotoUrl: "", } // Tipos de consulta com cores const colorsByType = { Rotina: "#4dabf7", Cardiologia: "#f76c6c", Otorrino: "#f7b84d", Pediatria: "#6cf78b", Dermatologia: "#9b59b6", Oftalmologia: "#2ecc71" }; const ProfissionalPage = () => { const [pacienteSelecionado, setPacienteSelecionado] = useState(null); const [events, setEvents] = useState([]); const [editingEvent, setEditingEvent] = useState(null); const [showPopup, setShowPopup] = useState(false); const [showActionModal, setShowActionModal] = useState(false); const [step, setStep] = useState(1); const [newEvent, setNewEvent] = useState({ title: "", type: "", time: "", pacienteId: "" }); const [selectedDate, setSelectedDate] = useState(null); const [selectedEvent, setSelectedEvent] = useState(null); const handleSave = (event: React.MouseEvent) => { event.preventDefault(); console.log("Laudo salvo!"); window.scrollTo({ top: 0, behavior: "smooth" }); }; const handleSmoothScroll = (event: React.MouseEvent, targetId: string) => { event.preventDefault(); const element = document.getElementById(targetId); if (element) { element.scrollIntoView({ behavior: 'smooth', block: 'start' }); } }; const handleAbrirProntuario = (paciente: any) => { setPacienteSelecionado(paciente); const pacienteLaudo = document.getElementById('pacienteLaudo') as HTMLInputElement; if (pacienteLaudo) pacienteLaudo.value = paciente.nome; const destinatario = document.getElementById('destinatario') as HTMLInputElement; if (destinatario) destinatario.value = `${paciente.nome} - ${paciente.cpf}`; const prontuarioSection = document.getElementById('prontuario-paciente'); if (prontuarioSection) { prontuarioSection.scrollIntoView({ behavior: 'smooth' }); } }; const handleFecharProntuario = () => { setPacienteSelecionado(null); }; // Clicar em um dia -> abrir popup 3 etapas const handleDateClick = (arg: any) => { setSelectedDate(arg.dateStr); setNewEvent({ title: "", type: "", time: "", pacienteId: "" }); setStep(1); setEditingEvent(null); setShowPopup(true); }; // Adicionar nova consulta const handleAddEvent = () => { const paciente = pacientes.find(p => p.nome === newEvent.title); const eventToAdd = { id: Date.now(), title: newEvent.title, type: newEvent.type, time: newEvent.time, date: selectedDate, pacienteId: paciente ? paciente.cpf : "", color: colorsByType[newEvent.type as keyof typeof colorsByType] || "#4dabf7" }; setEvents((prev) => [...prev, eventToAdd]); setShowPopup(false); }; // Editar consulta existente const handleEditEvent = () => { setEvents((prevEvents) => prevEvents.map((ev) => ev.id.toString() === editingEvent.id.toString() ? { ...ev, title: newEvent.title, type: newEvent.type, time: newEvent.time, color: colorsByType[newEvent.type as keyof typeof colorsByType] || "#4dabf7" } : ev ) ); setEditingEvent(null); setShowPopup(false); setShowActionModal(false); }; // Próxima etapa no popup const handleNextStep = () => { if (step < 3) setStep(step + 1); else editingEvent ? handleEditEvent() : handleAddEvent(); }; // Clicar em uma consulta -> abre modal de ação (Editar/Apagar) const handleEventClick = (clickInfo: any) => { setSelectedEvent(clickInfo.event); setShowActionModal(true); }; // Apagar consulta const handleDeleteEvent = () => { if (!selectedEvent) return; setEvents((prevEvents) => prevEvents.filter((ev: any) => ev.id.toString() !== selectedEvent.id.toString()) ); setShowActionModal(false); }; // Começar a editar const handleStartEdit = () => { if (!selectedEvent) return; setEditingEvent(selectedEvent); setNewEvent({ title: selectedEvent.title, type: selectedEvent.extendedProps.type, time: selectedEvent.extendedProps.time, pacienteId: selectedEvent.extendedProps.pacienteId || "" }); setStep(1); setShowActionModal(false); setShowPopup(true); }; // Aparência da consulta dentro do calendário const renderEventContent = (eventInfo: any) => { const bg = eventInfo.event.backgroundColor || eventInfo.event.extendedProps?.color || "#4dabf7"; return (
{eventInfo.event.title} {eventInfo.event.extendedProps.type} {eventInfo.event.extendedProps.time}
); }; return (

Conta do profissional

{medico.nome}

{medico.identificacao}

{/* Sidebar */}

Área do Profissional de Saúde

Bem-vindo à sua área exclusiva.

Calendário de Consultas

({ id: ev.id.toString(), title: ev.title, date: ev.date, color: ev.color, extendedProps: { type: ev.type, time: ev.time, pacienteId: ev.pacienteId, color: ev.color } }))} eventContent={renderEventContent} eventClick={handleEventClick} headerToolbar={{ left: 'prev,next today', center: 'title', right: 'dayGridMonth,timeGridWeek,timeGridDay' }} buttonText={{ today: 'Hoje', month: 'Dia', week: 'Semana', day: 'Mês' }} />

Gerenciamento de Pacientes

Paciente CPF Idade Status do laudo Ações {pacientes.map((paciente) => ( {paciente.nome} {paciente.cpf} {paciente.idade} {paciente.statusLaudo}

Detalhes do Paciente

))}

Prontuário do Paciente

{pacienteSelecionado && (

Dados do Paciente

Nome:

{pacienteSelecionado.nome}

CPF:

{pacienteSelecionado.cpf}

Idade:

{pacienteSelecionado.idade} anos

)}

03/09/2025