import InputMask from "react-input-mask"; import "./style/formagendamentos.css"; import { useState, useEffect } from "react"; const FormNovaConsulta = ({ onCancel, patientID }) => { const [isModoEmergencia, setIsModoEmergencia] = useState(false); const [selectedFile, setSelectedFile] = useState(null); const [anexos, setAnexos] = useState([]); const [loadingAnexos, setLoadingAnexos] = useState(false); const [paciente, setPaciente] = useState({}) const [acessibilidade, setAcessibilidade] = useState({cadeirante:false,idoso:false,gravida:false,bebe:false, autista:false }) const [dadosAtendimento, setDadosAtendimento] = useState({ profissional: '', tipoAtendimento: '', unidade: '', dataAtendimento: '', inicio: '', termino: '', solicitante: '', observacoes: '' }); useEffect(() => { if (!patientID) return; const fetchAnexos = async () => { setLoadingAnexos(true); try { const res = await fetch(`https://mock.apidog.com/m1/1053378-0-default/pacientes/${patientID}/anexos`); const data = await res.json(); setAnexos(data.data || []); } catch (err) { console.error("Erro ao buscar anexos:", err); } finally { setLoadingAnexos(false); } }; fetchAnexos(); }, [patientID]); const handleUpload = async () => { if (!selectedFile) return; const formData = new FormData(); formData.append("file", selectedFile); try { const res = await fetch(`https://mock.apidog.com/m1/1053378-0-default/pacientes/${patientID}/anexos`, { method: "POST", body: formData }); if (res.ok) { const novoAnexo = await res.json(); setAnexos(prev => [...prev, novoAnexo]); setSelectedFile(null); } else { console.error("Erro ao enviar anexo"); } } catch (err) { console.error("Erro ao enviar anexo:", err); } }; const handleclickAcessibilidade = (id) => { let resultado = acessibilidade[id] if(resultado === false){ setAcessibilidade({...acessibilidade, [id]:true}); console.log('mudou')} else if(resultado === true){ setAcessibilidade({...acessibilidade, [id]:false})} console.log(id) } const FormatCPF = (valor) => { console.log(valor) const digits = String(valor).replace(/\D/g, '').slice(0, 11); BuscarPacienteExistentePeloCPF(valor) return digits .replace(/(\d{3})(\d)/, '$1.$2') .replace(/(\d{3})(\d)/, '$1.$2') .replace(/(\d{3})(\d{1,2})$/, '$1-$2'); } const FormatTelefones = (valor) => { const digits = String(valor).replace(/\D/g, '').slice(0, 11); return digits .replace(/(\d)/, '($1') .replace(/(\d{2})(\d)/, '$1) $2' ) .replace(/(\d)(\d{4})/, '$1 $2') .replace(/(\d{4})(\d{4})/, '$1-$2') } const BuscarCPFnoBancodeDados = async (cpf) => { var myHeaders = new Headers(); myHeaders.append("Authorization", "Bearer "); myHeaders.append("Content-Type", "application/json"); var raw = JSON.stringify({ "cpf": cpf }); var requestOptions = { method: 'POST', headers: myHeaders, body: raw, redirect: 'follow' }; const response = await fetch("https://mock.apidog.com/m1/1053378-0-default/pacientes/validar-cpf", requestOptions); const result = await response.json(); return result } const BuscarPacienteExistentePeloCPF = async (value) => { if(isNaN(value[13]) === false && value.length === 14)try { const result = await BuscarCPFnoBancodeDados(value); console.log("Resultado:", result); if (result.data.existe === true){ var myHeaders = new Headers(); myHeaders.append("Authorization", "Bearer "); var requestOptions = { method: 'GET', headers: myHeaders, redirect: 'follow' }; fetch("https://mock.apidog.com/m1/1053378-0-default/pacientes/", requestOptions) .then(response => response.json()) .then(result => setPaciente(result.data)) .catch(error => console.log('error', error)); } } catch (error) { console.log("error", error); } //BuscarCPFnoBancodeDados(value) } const handleChange = (e) => { const {value, name} = e.target; console.log(value, name) if(name === 'email'){ setPaciente({...paciente, contato:{ ...paciente.contato, email:value }}) } else if(name === 'telefone'){ setPaciente({...paciente, contato:{ ...paciente.contato, telefone1:FormatTelefones(value) }}) } else{ setPaciente({...paciente,[name]:value}) } } const handleAtendimentoChange = (e) => { const { value, name } = e.target; setDadosAtendimento(prev => ({ ...prev, [name]: value })); }; const handleSubmitExcecao = async () => { console.log("Modo Emergência Ativado: Tentando criar Exceção com novo endpoint."); const { profissional, dataAtendimento, tipoAtendimento, inicio, termino, observacoes } = dadosAtendimento; if (!profissional || !dataAtendimento || !tipoAtendimento || !inicio || !termino) { alert("Por favor, preencha o Profissional, Data, Tipo e Horários para a exceção."); return; } const payload = { doctor_id: profissional, date: dataAtendimento, start_time: inicio + ":00", // Adiciona ":00" se o input type="time" retornar apenas HH:MM end_time: termino + ":00", // Adiciona ":00" kind: "liberacao", // Usando 'excecao' ou 'consulta' ao invés de 'bloqueio' reason: tipoAtendimento, //observation: observacoes || "Agendamento fora da grade horária padrão.", }; var myHeaders = new Headers(); myHeaders.append("Content-Type", "application/json"); var requestOptions = { method: 'POST', headers: myHeaders, body: JSON.stringify(payload), redirect: 'follow' }; try { const response = await fetch("https://mock.apidog.com/m1/1053378-0-default/rest/v1/doctor_exceptions", requestOptions); const result = await response.json(); if (response.ok || response.status === 201) { console.log("Exceção de emergência criada com sucesso:", result); alert(`Consulta de emergência agendada como exceção! Detalhes: ${JSON.stringify(result)}`); } else { console.error("Erro ao criar exceção de emergência:", result); alert(`Erro ao agendar exceção. Status: ${response.status}. Detalhes: ${result.message || JSON.stringify(result)}`); } } catch (error) { console.error("Erro na requisição para criar exceção:", error); alert("Erro de comunicação com o servidor ou formato de resposta inválido."); } }; const handleSubmitPadrao = () => { console.log("Salvando agendamento."); alert("Agendamento salvo!"); }; const handleSubmit = (e) => { e.preventDefault(); if (isModoEmergencia) { handleSubmitExcecao(); } else { handleSubmitPadrao(); } }; return (

Informações do paciente

e.target.value = FormatCPF(e.target.value)} />

Informações adicionais

setSelectedFile(e.target.files[0])} /> {selectedFile && ( )}
{loadingAnexos ? (

Carregando anexos...

) : ( anexos.map((anexo, index) => (
{anexo.nome || anexo.fileName}
)) )}

Informações do atendimento

{isModoEmergencia && (

⚠️ As informações de data e horário serão enviadas como uma exceção fora da grade normal.

)}
handleclickAcessibilidade(e.currentTarget.id)}> accessible
handleclickAcessibilidade(e.currentTarget.id)}> elderly
handleclickAcessibilidade(e.currentTarget.id)}> pregnant_woman
handleclickAcessibilidade(e.currentTarget.id)}>
handleclickAcessibilidade(e.currentTarget.id)}>
); }; export default FormNovaConsulta;