import React, { useEffect, useState } from 'react';
import FormNovaConsulta from '../components/AgendarConsulta/FormNovaConsulta';
import API_KEY from '../components/utils/apiKeys';
import { useAuth } from '../components/utils/AuthProvider';
import dayjs from 'dayjs';
import { UserInfos } from '../components/utils/Functions-Endpoints/General';
import { toast } from 'react-toastify'; 
const AgendamentoCadastroManager = ({ setPageConsulta, agendamentoInicial }) => {

    const { getAuthorizationHeader } = useAuth();
  
    const [agendamento, setAgendamento] = useState({ status: 'agendado' });
    const [idUsuario, setIDusuario] = useState('0');
    const [isEditMode, setIsEditMode] = useState(false); 

    let authHeader = getAuthorizationHeader();

    useEffect(() => {
        
      
        if (agendamentoInicial && agendamentoInicial.id) {
           
            const scheduled_at = dayjs(agendamentoInicial.scheduled_at);

            setAgendamento({
                ...agendamentoInicial,
              
                dataAtendimento: scheduled_at.format('YYYY-MM-DD'), 
                horarioInicio: scheduled_at.format('HH:mm'),         
                
              
                tipo_consulta: agendamentoInicial.appointment_type || 'Presencial',
                convenio: agendamentoInicial.insurance_provider || 'Público',
                
              
                paciente_nome: agendamentoInicial.paciente_nome || '',
                paciente_cpf: agendamentoInicial.paciente_cpf || '',
                medico_nome: agendamentoInicial.medico_nome || '',
                
                
                patient_id: agendamentoInicial.patient_id, 
                doctor_id: agendamentoInicial.doctor_id,
                status: agendamentoInicial.status,
            });
            setIsEditMode(true);
            
        } else {
          
            setAgendamento({
                status: 'agendado',
                patient_id: null,
                doctor_id: null,
                dataAtendimento: dayjs().format('YYYY-MM-DD'),
                horarioInicio: '',
                tipo_consulta: 'Presencial',
                convenio: 'Público',
                paciente_nome: '',
                paciente_cpf: '',
                medico_nome: ''
            });
            setIsEditMode(false);
        }

        
        const ColherInfoUsuario = async () => {
            const result = await UserInfos(authHeader);
            setIDusuario(result?.profile?.id);
        };
        ColherInfoUsuario();
        
       
    }, [agendamentoInicial, authHeader]);
    const handleSave = async (Dict) => {
        var myHeaders = new Headers();
        myHeaders.append("apikey", API_KEY);
        myHeaders.append("Authorization", authHeader);
        myHeaders.append("Content-Type", "application/json");
        myHeaders.append("Prefer", "return=representation");
   
        var raw = JSON.stringify({
            "patient_id": Dict.patient_id,
            "doctor_id": Dict.doctor_id,
            "scheduled_at": `${Dict.dataAtendimento}T${Dict.horarioInicio}:00.000Z`,
            "duration_minutes": Dict.duration_minutes || 30, 
            "appointment_type": Dict.tipo_consulta,
            "insurance_provider": Dict.convenio,
            "status": Dict.status || 'agendado', 
            "created_by": idUsuario,
            "created_at": dayjs().toISOString(),
            
        });
        
        var requestOptions = {
            method: 'POST',
            headers: myHeaders,
            body: raw,
            redirect: 'follow'
        };
        
        try {
            const response = await fetch("https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/appointments", requestOptions);
            if (response.ok) {
                toast.success("Agendamento criado com sucesso! ✅");
                setPageConsulta(false); 
            } else {
                const errorText = await response.text();
                console.error('Erro ao cadastrar agendamento:', errorText);
                toast.error(`Falha ao criar agendamento: ${JSON.parse(errorText)?.message || 'Erro desconhecido'}`);
            }
        } catch (error) {
            console.error('Erro de rede:', error);
            toast.error("Erro de rede ao salvar. ❌");
        }
    }
    const handleUpdate = async (Dict) => {
        const appointmentId = agendamentoInicial.id;
        
        var myHeaders = new Headers();
        myHeaders.append("apikey", API_KEY);
        myHeaders.append("Authorization", authHeader);
        myHeaders.append("Content-Type", "application/json");
        myHeaders.append("Prefer", "return=representation");
    
        var raw = JSON.stringify({
            "patient_id": Dict.patient_id,
            "doctor_id": Dict.doctor_id,
            "scheduled_at": `${Dict.dataAtendimento}T${Dict.horarioInicio}:00.000Z`,
            "duration_minutes": Dict.duration_minutes || 30,
            "appointment_type": Dict.tipo_consulta,
            "insurance_provider": Dict.convenio,
            "status": Dict.status,
            "updated_at": dayjs().toISOString(),
            "updated_by": idUsuario, 
        });
        
        var requestOptions = {
            method: 'PATCH',
            headers: myHeaders,
            body: raw,
            redirect: 'follow'
        };
        
        try {
            const response = await fetch(`https://yuanqfswhberkoevtmfr.supabase.co/rest/v1/appointments?id=eq.${appointmentId}`, requestOptions);
            if (response.ok) {
                toast.success("Agendamento atualizado com sucesso! 📝");
                setPageConsulta(false); 
            } else {
                const errorText = await response.text();
                console.error('Erro ao atualizar agendamento:', errorText);
                toast.error(`Falha ao atualizar agendamento: ${JSON.parse(errorText)?.message || 'Erro desconhecido'}`);
            }
        } catch (error) {
            console.error('Erro de rede:', error);
            toast.error("Erro de rede ao atualizar. ❌");
        }
    }
    const handleFormSubmit = (Dict) => {
        if (isEditMode) {
           
            handleUpdate(Dict);
        } else {
         
            handleSave(Dict);
        }
    }


    return (
        <div>
            {}
            <FormNovaConsulta 
                onSave={handleFormSubmit} 
                agendamento={agendamento} 
                setAgendamento={setAgendamento} 
                onCancel={() => setPageConsulta(false)}
            />
        </div>
    );
};

export default AgendamentoCadastroManager;