import React, { useState, useEffect, useCallback } from "react"; import { Link } from "react-router-dom"; const ENDPOINT_LISTAR = "https://mock.apidog.com/m1/1053378-0-default/rest/v1/doctor_availability"; const MEDICOS_MOCKADOS = [ { id: 53, nome: " João Silva" }, { id: 19, nome: " Ana Costa" }, { id: 11, nome: " Pedro Santos" }, ]; const diasDaSemana = ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sáb"]; const formatarDataHora = (isoString) => { if (!isoString) return "N/A"; try { const data = new Date(isoString); return data.toLocaleTimeString("pt-BR", { hour: '2-digit', minute: '2-digit', timeZone: 'UTC' }); } catch (error) { return "Data Inválida"; } }; const DisponibilidadesDoctorPage = () => { const [disponibilidades, setDisponibilidades] = useState([]); const [loading, setLoading] = useState(false); const [filtroMedicoNome, setFiltroMedicoNome] = useState(""); const [medicoEncontradoId, setMedicoEncontradoId] = useState(null); const encontrarMedicoIdPorNome = (nome) => { if (!nome) return null; const termoBusca = nome.toLowerCase(); const medico = MEDICOS_MOCKADOS.find(m => m.nome.toLowerCase().includes(termoBusca) ); return medico ? medico.id : null; }; const fetchDisponibilidades = useCallback(async (nome) => { setLoading(true); setDisponibilidades([]); setMedicoEncontradoId(null); const doctorId = encontrarMedicoIdPorNome(nome); if (!doctorId) { setLoading(false); return; } const url = `${ENDPOINT_LISTAR}?select=*&doctor_id=eq.${doctorId}`; try { const response = await fetch(url); const result = await response.json(); let dados = Array.isArray(result) ? result : []; setDisponibilidades(dados); setMedicoEncontradoId(doctorId); } catch (error) { setDisponibilidades([]); } finally { setLoading(false); } }, []); useEffect(() => { if (filtroMedicoNome) { const timer = setTimeout(() => { fetchDisponibilidades(filtroMedicoNome); }, 300); return () => clearTimeout(timer); } else { setDisponibilidades([]); setMedicoEncontradoId(null); } }, [filtroMedicoNome, fetchDisponibilidades]); const rotaGerenciar = medicoEncontradoId ? `../medicos/${medicoEncontradoId}/edit` : `../medicos/novo/edit`; return (

Disponibilidades por Médico

+ Gerenciar Disponibilidades
setFiltroMedicoNome(e.target.value)} style={{ border: "1px solid #ccc", borderRadius: "4px", padding: "5px" }} />

Disponibilidades Encontradas ({disponibilidades.length})

{loading ? (

Carregando disponibilidades...

) : (filtroMedicoNome && disponibilidades.length === 0) ? (

Nenhuma disponibilidade encontrada para o nome buscado.

) : ( {[ "Dia da Semana", "Início", "Término", "Intervalo", "Tipo Consulta"].map( (header) => ( ) )} {disponibilidades.map((disp, index) => ( ))}
{header}
{diasDaSemana[disp.weekday] || disp.weekday} {formatarDataHora(disp.start_time)} {formatarDataHora(disp.end_time)} {disp.slot_minutes} {disp.appointment_type}
)}
); }; export default DisponibilidadesDoctorPage;