/*
|--------------------------------------------------------------------------
| Agência PSI
|--------------------------------------------------------------------------
| Arquivo: src/features/patients/composables/usePatientMessages.js
|
| Mensagens de conversa do paciente. 200 mais recentes (in+out) pra alimentar
| o card "Últimas mensagens" (top 4) e KPIs da aba Conversas.
| Conversa completa fica no PatientConversationsTab.
|
| I/O delegada ao patientsRepository.
|--------------------------------------------------------------------------
*/
import { ref, computed } from 'vue';
import { listMessagesByPatient } from '@/features/patients/services/patientsRepository';

export function usePatientMessages() {
    const messages = ref([]);
    const loading = ref(false);
    const error = ref('');

    async function load(patientId) {
        if (!patientId) {
            messages.value = [];
            return;
        }
        loading.value = true;
        error.value = '';
        messages.value = [];
        try {
            messages.value = await listMessagesByPatient(patientId);
        } catch (e) {
            error.value = e?.message || 'Falha ao carregar mensagens.';
            messages.value = [];
        } finally {
            loading.value = false;
        }
    }

    const recentes = computed(() => messages.value.slice(0, 4));
    const totalIn = computed(() => messages.value.filter((m) => m.direction === 'in' || m.direction === 'inbound').length);
    const totalOut = computed(() => messages.value.filter((m) => m.direction === 'out' || m.direction === 'outbound').length);
    const ultimaMensagem = computed(() => messages.value[0] || null);
    const primeiraMensagem = computed(() => messages.value[messages.value.length - 1] || null);

    const canais = computed(() => {
        const set = new Set();
        for (const m of messages.value) if (m.channel) set.add(m.channel);
        return [...set];
    });

    return {
        messages,
        loading,
        error,
        load,
        recentes,
        totalIn,
        totalOut,
        ultimaMensagem,
        primeiraMensagem,
        canais
    };
}
