// src/PagesMedico/EditPageRelatorio.jsx
import React, { useEffect, useState } from 'react';
import { useParams, useNavigate } from 'react-router-dom';
import API_KEY from '../components/utils/apiKeys';
import { useAuth } from '../components/utils/AuthProvider';
import TiptapEditor from '../PagesMedico/TiptapEditor';
import { GetPatientByID } from '../components/utils/Functions-Endpoints/Patient';
import { GetDoctorByID } from '../components/utils/Functions-Endpoints/Doctor';
const EditPageRelatorio = () => {
const params = useParams();
const navigate = useNavigate();
const { getAuthorizationHeader } = useAuth();
const authHeader = getAuthorizationHeader();
const [loading, setLoading] = useState(true);
const [report, setReport] = useState(null);
const [patient, setPatient] = useState(null);
const [doctor, setDoctor] = useState(null);
const [html, setHtml] = useState('');
const generateTemplate = (r = {}, p = {}, d = {}) => {
const patientName = p?.full_name || '[NOME DO PACIENTE]';
const birthDate = p?.birth_date || '';
const exam = r?.exam || '';
const doctorName = d?.full_name || r?.requested_by || '';
return `
Clinica Rise up
Dr - CRM/SP 123456
Avenida - (79) 9 4444-4444
Paciente: ${patientName}
Data de nascimento: ${birthDate}
Data do exame:
Exame: ${exam}
Diagnóstico:
${r?.diagnosis || ''}
Conclusão:
${r?.conclusion || ''}
Dr ${doctorName}
Emitido em: 0
`;
};
useEffect(() => {
const load = async () => {
setLoading(true);
try {
const myHeaders = new Headers();
myHeaders.append("apikey", API_KEY);
if (authHeader) myHeaders.append("Authorization", authHeader);
const requestOptions = { method: 'GET', headers: myHeaders, redirect: 'follow' };
// Pega relatório por id (supabase geralmente retorna array para ?id=eq.X)
const resp = await fetch(`https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/reports?id=eq.${params.id}`, requestOptions);
const data = await resp.json();
const rep = Array.isArray(data) ? data[0] : data;
if (!rep) throw new Error('Relatório não encontrado');
setReport(rep);
// busca paciente
if (rep.patient_id) {
const p = await GetPatientByID(rep.patient_id, authHeader);
setPatient(Array.isArray(p) ? p[0] : p);
}
// busca doctor se tiver created_by/requested_by id (tentamos fallback)
if (rep.created_by) {
try {
const d = await GetDoctorByID(rep.created_by, authHeader);
setDoctor(Array.isArray(d) ? d[0] : d);
} catch (e) {
// ignore
}
}
// content_html preferencial
let initial = rep.content_html || rep.content || rep.diagnosis || rep.conclusion || '';
if (!initial || initial.trim() === '') {
initial = generateTemplate(rep, patient || {}, doctor || {});
}
setHtml(initial);
} catch (err) {
console.error('Erro carregar relatório', err);
alert('Erro ao carregar relatório. Veja console.');
} finally {
setLoading(false);
}
};
load();
// eslint-disable-next-line
}, [params.id, authHeader]);
const handleSave = async () => {
setLoading(true);
try {
const myHeaders = new Headers();
myHeaders.append('apikey', API_KEY);
if (authHeader) myHeaders.append('Authorization', authHeader);
myHeaders.append('Content-Type', 'application/json');
myHeaders.append('Accept', 'application/json');
// pedir que o Supabase retorne a representação do registro atualizado (opcional)
myHeaders.append('Prefer', 'return=representation');
const body = JSON.stringify({ content_html: html });
const res = await fetch(`https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/reports?id=eq.${params.id}`, {
method: 'PATCH',
headers: myHeaders,
body
});
if (!res.ok) {
let txt;
try { txt = await res.text(); } catch (e) { txt = 'erro lendo resposta'; }
console.error('Erro PATCH', res.status, txt);
throw new Error('Erro na API');
}
// Recebe o dado atualizado e atualiza o estado do componente
let updatedData;
try {
updatedData = await res.json();
} catch (e) {
updatedData = null;
}
const updatedReport = Array.isArray(updatedData) ? updatedData[0] : updatedData;
if (updatedReport) {
setReport(updatedReport);
setHtml(updatedReport.content_html || '');
}
alert('Relatório atualizado com sucesso!');
navigate('/medico/relatorios');
} catch (err) {
console.error(err);
alert('Erro ao salvar. Veja console.');
} finally {
setLoading(false);
}
};
if (loading) return Carregando...
;
return (
Editar Relatório do Paciente: {patient?.full_name || '...'}
Conteúdo do Relatório
setHtml(newHtml)} />
);
};
export default EditPageRelatorio;