/*
 * useMelissaWhatsapp — agregado leve pro card "WhatsApp" do resumo Melissa.
 *
 * Lê da view `conversation_threads` (mesma fonte do drawer/kanban):
 *   - count    = soma de unread_count em threads WhatsApp não-lidas
 *   - top1     = thread mais recente com mensagens não-lidas (preview)
 *
 * Filtra channel='whatsapp' pra coerência com o título do card. Inclui
 * só threads com unread_count > 0 (limit 50 — payload pequeno e cobre
 * praticamente qualquer clínica; se passar disso, o count fica ligeiramente
 * subestimado mas o card já cumpre o papel de "alerta visual").
 *
 * Sem realtime no MVP — refetch manual via `refetch()`. Quando quiser
 * atualização instantânea, plugar a subscription do `useConversations`
 * (channel `conv_msg_tenant_<tid>` em conversation_messages INSERT).
 */
import { ref, onMounted } from 'vue';
import { supabase } from '@/lib/supabase/client';
import { tenantDb } from '@/lib/supabase/tenantClient';
import { useTenantStore } from '@/stores/tenantStore';

const EMPTY = { count: 0, ultimaMsg: '', ultimoNome: '', ultimaEm: null };

export function useMelissaWhatsapp() {
    const summary = ref({ ...EMPTY });
    const loading = ref(false);
    const error = ref(null);

    async function fetch() {
        const tenantStore = useTenantStore();
        if (typeof tenantStore.ensureLoaded === 'function') {
            await tenantStore.ensureLoaded();
        }
        const tid = tenantStore.activeTenantId || tenantStore.tenantId || null;
        if (!tid) { summary.value = { ...EMPTY }; return; }

        loading.value = true;
        error.value = null;
        try {
            const { data, error: err } = await tenantDb().from('conversation_threads')
                .select('patient_name, contact_number, unread_count, last_message_body, last_message_at, last_message_direction')
                
                .eq('channel', 'whatsapp')
                .gt('unread_count', 0)
                .order('last_message_at', { ascending: false })
                .limit(50);
            if (err) throw err;

            const rows = data || [];
            const totalUnread = rows.reduce((s, t) => s + Number(t.unread_count || 0), 0);
            const top = rows[0] || null;
            summary.value = {
                count: totalUnread,
                ultimaMsg: String(top?.last_message_body || '').trim(),
                ultimoNome: String(top?.patient_name || top?.contact_number || '').trim() || '—',
                ultimaEm: top?.last_message_at || null
            };
        } catch (e) {
            // eslint-disable-next-line no-console
            console.warn('[useMelissaWhatsapp]', e);
            error.value = e?.message || 'Erro ao carregar WhatsApp';
            summary.value = { ...EMPTY };
        } finally {
            loading.value = false;
        }
    }

    onMounted(fetch);

    return { summary, loading, error, refetch: fetch };
}
