/*
|--------------------------------------------------------------------------
| Agência PSI
|--------------------------------------------------------------------------
| Criado e desenvolvido por Leonardo Nohama
|
| Tecnologia aplicada à escuta.
| Estrutura para o cuidado.
|
| Arquivo: src/features/agenda/composables/useAgendaClinicEvents.js
| Data: 2026
| Local: São Carlos/SP — Brasil
|--------------------------------------------------------------------------
| © 2026 — Todos os direitos reservados
|--------------------------------------------------------------------------
*/
import { ref } from 'vue';
import { listClinicEvents, createClinicAgendaEvento, updateClinicAgendaEvento, deleteClinicAgendaEvento } from '@/features/agenda/services/agendaClinicRepository';

export function useAgendaClinicEvents() {
    const loading = ref(false);
    const error = ref('');
    const rows = ref([]);

    async function loadClinicRange({ tenantId, ownerIds, startISO, endISO }) {
        loading.value = true;
        error.value = '';
        try {
            rows.value = await listClinicEvents({ tenantId, ownerIds, startISO, endISO });
        } catch (e) {
            error.value = e?.message || 'Falha ao carregar eventos.';
        } finally {
            loading.value = false;
        }
    }

    async function createClinic(payload, { tenantId } = {}) {
        loading.value = true;
        error.value = '';
        try {
            return await createClinicAgendaEvento(payload, { tenantId });
        } catch (e) {
            error.value = e?.message || 'Falha ao criar evento.';
            throw e;
        } finally {
            loading.value = false;
        }
    }

    async function updateClinic(id, patch, { tenantId } = {}) {
        loading.value = true;
        error.value = '';
        try {
            return await updateClinicAgendaEvento(id, patch, { tenantId });
        } catch (e) {
            error.value = e?.message || 'Falha ao atualizar evento.';
            throw e;
        } finally {
            loading.value = false;
        }
    }

    async function removeClinic(id, { tenantId } = {}) {
        loading.value = true;
        error.value = '';
        try {
            return await deleteClinicAgendaEvento(id, { tenantId });
        } catch (e) {
            error.value = e?.message || 'Falha ao remover evento.';
            throw e;
        } finally {
            loading.value = false;
        }
    }

    return {
        loading,
        error,
        rows,
        loadClinicRange,
        createClinic,
        updateClinic,
        removeClinic
    };
}
