import React, { useState, useEffect, useCallback } from 'react';
import dayjs from 'dayjs';
import FormCriarExcecao from '../components/FormCriarExcecao';
import "../components/AgendarConsulta/style/formagendamentos.css";
import "./style/Agendamento.css";
import './style/FilaEspera.css';
const ENDPOINT_LISTAR = "https://mock.apidog.com/m1/1053378-0-default/rest/v1/doctor_exceptions";
const ENDPOINT_DELETAR = "https://mock.apidog.com/m1/1053378-0-default/rest/v1/doctor_exceptions/";
const ExcecoesDisponibilidade = () => {
const [pageNovaExcecao, setPageNovaExcecao] = useState(false);
const [excecoes, setExcecoes] = useState([]);
const [loading, setLoading] = useState(false);
// Filtros
const [filtroMedicoId, setFiltroMedicoId] = useState('');
const [filtroData, setFiltroData] = useState(dayjs().format('YYYY-MM-DD'));
// Estado para controlar a visualização (Diário, Semanal)
const [visualizacao, setVisualizacao] = useState('diario');
// Função para buscar as exceções
const fetchExcecoes = useCallback(async (doctorId, date) => {
setLoading(true);
let url = `${ENDPOINT_LISTAR}?select=*`;
if (doctorId) {
url += `&doctor_id=eq.${doctorId}`; // Assume filtro por igualdade de ID
}
if (date) {
url += `&date=eq.${date}`; // Assume filtro por igualdade de data
}
try {
const requestOptions = { method: 'GET', redirect: 'follow' };
const response = await fetch(url, requestOptions);
const result = await response.json();
if (response.ok && Array.isArray(result)) {
setExcecoes(result);
} else {
setExcecoes([]);
console.error("Erro ao listar exceções:", result);
alert("Erro ao carregar lista de exceções.");
}
} catch (error) {
console.error('Erro na requisição de listagem de exceções:', error);
setExcecoes([]);
alert("Erro de comunicação com o servidor ao listar exceções.");
} finally {
setLoading(false);
}
}, []);
// Função para deletar uma exceção
const deletarExcecao = async (id) => {
if (!window.confirm(`Tem certeza que deseja deletar a exceção com ID: ${id}?`)) return;
try {
const requestOptions = { method: 'DELETE', redirect: 'follow' };
const response = await fetch(`${ENDPOINT_DELETAR}${id}`, requestOptions);
if (response.ok || response.status === 204) {
alert(`Exceção ${id} deletada com sucesso.`);
fetchExcecoes(filtroMedicoId, filtroData); // Recarrega a lista
} else {
const result = await response.json();
alert(`Erro ao deletar exceção. Detalhes: ${result.message || JSON.stringify(result)}`);
}
} catch (error) {
console.error('Erro na requisição de deleção:', error);
alert('Erro de comunicação ao tentar deletar a exceção.');
}
};
// Efeito para carregar exceções quando os filtros mudam
useEffect(() => {
fetchExcecoes(filtroMedicoId, filtroData);
}, [fetchExcecoes, filtroMedicoId, filtroData]);
// Handler de cancelamento do formulário de criação
const handleCancelForm = (recarregar = false) => {
setPageNovaExcecao(false);
if (recarregar) {
fetchExcecoes(filtroMedicoId, filtroData); // Recarrega se a criação foi bem-sucedida
}
}
// Se o formulário de criação estiver aberto, renderiza apenas ele
if (pageNovaExcecao) {
return
Carregando exceções...
) : excecoes.length === 0 ? (Nenhuma exceção encontrada para os filtros aplicados.
) : (| ID Exceção | ID Médico | Data | Início | Término | Tipo | Motivo | Ações |
|---|---|---|---|---|---|---|---|
| {excecao.id || 'N/A'} | {excecao.doctor_id} | {excecao.date} | {excecao.start_time ? excecao.start_time.substring(0, 5) : 'Dia Todo'} | {excecao.end_time ? excecao.end_time.substring(0, 5) : 'Dia Todo'} | {excecao.kind} | {excecao.reason} | {excecao.id && ( )} |