"use client" import React, { useMemo, useState } from 'react' import { useSearchParams, useRouter } from 'next/navigation' import { Button } from '@/components/ui/button' import { Card } from '@/components/ui/card' import { Toggle } from '@/components/ui/toggle' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select' import { Badge } from '@/components/ui/badge' import { Avatar, AvatarFallback } from '@/components/ui/avatar' import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog' import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' import { Building2, Filter, Globe, HeartPulse, Languages, MapPin, ShieldCheck, Star, Stethoscope, ChevronRight, UserRound } from 'lucide-react' import { cn } from '@/lib/utils' type TipoConsulta = 'teleconsulta' | 'local' type Medico = { id: number nome: string especialidade: string crm: string categoriaHero: string avaliacao: number avaliacaoQtd: number convenios: string[] endereco?: string bairro?: string cidade?: string precoLocal?: string precoTeleconsulta?: string atendeLocal: boolean atendeTele: boolean agenda: { label: string data: string horarios: string[] }[] experiencia: string[] planosSaude: string[] consultorios: { nome: string; endereco: string; telefone: string }[] servicos: { nome: string; preco: string }[] opinioes: { id: number; paciente: string; data: string; nota: number; comentario: string }[] } type MedicoBase = Omit & Partial>; const especialidadesHero = ['Psicólogo', 'Médico clínico geral', 'Pediatra', 'Dentista', 'Ginecologista', 'Veja mais'] // NOTE: keep this mock local to component to avoid cross-file references const medicosMock: Medico[] = [ { id: 1, nome: 'Paula Pontes', especialidade: 'Psicóloga clínica', crm: 'CRP SE 19/4244', categoriaHero: 'Psicólogo', avaliacao: 4.9, avaliacaoQtd: 23, convenios: ['Amil', 'Unimed'], endereco: 'Av. Doutor José Machado de Souza, 200 - Jardins', bairro: 'Jardins', cidade: 'Aracaju • SE', precoLocal: 'R$ 180', precoTeleconsulta: 'R$ 160', atendeLocal: true, atendeTele: true, agenda: [ { label: 'Hoje', data: '9 Out', horarios: [] }, { label: 'Amanhã', data: '10 Out', horarios: ['09:00', '10:00', '11:00', '12:00', '13:00'] }, { label: 'Sáb.', data: '11 Out', horarios: ['11:00', '12:00', '13:00', '14:00'] }, { label: 'Dom.', data: '12 Out', horarios: [] } ], experiencia: ['Atendimento clínico há 8 anos'], planosSaude: ['Amil'], consultorios: [], servicos: [], opinioes: [] } ] export default function ResultadosClient() { const params = useSearchParams() const router = useRouter() const [tipoConsulta, setTipoConsulta] = useState( params?.get('tipo') === 'presencial' ? 'local' : 'teleconsulta' ) const [especialidadeHero, setEspecialidadeHero] = useState(params?.get('especialidade') || 'Psicólogo') const [convenio, setConvenio] = useState('Todos') const [bairro, setBairro] = useState('Todos') const [agendasExpandida, setAgendasExpandida] = useState>({}) const [medicoSelecionado, setMedicoSelecionado] = useState(null) const [abaDetalhe, setAbaDetalhe] = useState('experiencia') const profissionais = useMemo(() => { return medicosMock.filter(medico => { if (tipoConsulta === 'local' && !medico.atendeLocal) return false if (tipoConsulta === 'teleconsulta' && !medico.atendeTele) return false if (convenio !== 'Todos' && !medico.convenios.includes(convenio)) return false if (bairro !== 'Todos' && medico.bairro !== bairro) return false if (especialidadeHero !== 'Veja mais' && medico.categoriaHero !== especialidadeHero) return false if (especialidadeHero === 'Veja mais' && medico.categoriaHero !== 'Veja mais') return false return true }) }, [bairro, convenio, especialidadeHero, tipoConsulta]) const toggleBase = 'rounded-full px-4 py-[10px] text-sm font-medium transition hover:bg-primary hover:text-primary-foreground focus-visible:ring-2 focus-visible:ring-primary/60 active:scale-[0.97]' return (

Resultados da procura

Qual especialização você deseja?

{especialidadesHero.map(item => ( ))}
setTipoConsulta('teleconsulta')} className={cn(toggleBase, tipoConsulta === 'teleconsulta' ? 'bg-primary text-primary-foreground' : 'border border-primary/40 text-primary')} > Teleconsulta setTipoConsulta('local')} className={cn(toggleBase, tipoConsulta === 'local' ? 'bg-primary text-primary-foreground' : 'border border-primary/40 text-primary')} > Consulta no local
{profissionais.map(medico => (

{medico.nome}

{medico.especialidade}
{medico.avaliacao.toFixed(1)} • {medico.avaliacaoQtd} avaliações {medico.crm} {medico.convenios.join(', ')}
{tipoConsulta === 'local' && medico.atendeLocal && (
{medico.endereco}
{medico.cidade} {medico.precoLocal}
)} {tipoConsulta === 'teleconsulta' && medico.atendeTele && (
Teleconsulta {medico.precoTeleconsulta}
)}
Idiomas: Português, Inglês Acolhimento em cada consulta Pagamento seguro Especialista recomendado
{medico.agenda.map(coluna => { const horarios = agendasExpandida[medico.id] ? coluna.horarios : coluna.horarios.slice(0, 3) return (

{coluna.label}

{coluna.data}

{horarios.length ? ( horarios.map(horario => ( )) ) : ( Sem horários )} {!agendasExpandida[medico.id] && coluna.horarios.length > 3 && ( +{coluna.horarios.length - 3} horários )}
) })}
))} {!profissionais.length && ( Nenhum profissional encontrado. Ajuste os filtros para ver outras opções. )}
!open && setMedicoSelecionado(null)}> {medicoSelecionado && ( <> {medicoSelecionado.nome}

{medicoSelecionado.especialidade} • {medicoSelecionado.crm}

{medicoSelecionado.avaliacao.toFixed(1)} ({medicoSelecionado.avaliacaoQtd} avaliações) {medicoSelecionado.planosSaude.join(' • ')}
Experiência Planos de saúde Consultórios Serviços Opiniões ({medicoSelecionado.opinioes.length}) Agenda {medicoSelecionado.experiencia.map((linha, index) => (

{linha}

))}
{medicoSelecionado.planosSaude.map(plano => ( {plano} ))} {medicoSelecionado.consultorios.length ? ( medicoSelecionado.consultorios.map((consultorio, index) => (

{consultorio.nome}

{consultorio.endereco}

Telefone: {consultorio.telefone}

)) ) : (

Atendimento exclusivamente por teleconsulta.

)}
{medicoSelecionado.servicos.map(servico => (
{servico.nome} {servico.preco}
))}
{medicoSelecionado.opinioes.map(opiniao => (
{opiniao.paciente} {opiniao.data}
{Array.from({ length: opiniao.nota }).map((_, index) => ( ))}

{opiniao.comentario}

))}

Escolha o melhor horário disponível para sua consulta.

{medicoSelecionado.agenda.map(coluna => (

{coluna.label}

{coluna.data}

{coluna.horarios.length ? ( coluna.horarios.map(horario => ( )) ) : ( Sem horários )}
))}
)}
) }