import { describe, expect, it, beforeEach } from 'vitest';
import { addMention, setMentions, markAllRead, markRead, getMentionsSnapshot, getUnreadCount, resetMentions } from '../mentionsStore';
import { IMentionEntry } from '../../../api/mentions';

const make = (id: number, read = false): IMentionEntry => ({
    mentionId: id, senderId: 1, senderUsername: 'Bob', senderFigure: '', roomId: 9, roomName: 'R',
    message: '@me hi', mentionType: 0, timestamp: 0, read
});

describe('mentionsStore', () =>
{
    beforeEach(() => resetMentions());

    it('adds newest-first and counts unread', () =>
    {
        addMention(make(1));
        addMention(make(2));
        expect(getMentionsSnapshot()[0].mentionId).toBe(2);
        expect(getUnreadCount()).toBe(2);
    });

    it('setMentions replaces and recomputes unread', () =>
    {
        setMentions([make(1, true), make(2, false)]);
        expect(getMentionsSnapshot()).toHaveLength(2);
        expect(getUnreadCount()).toBe(1);
    });

    it('markAllRead zeroes unread', () =>
    {
        setMentions([make(1), make(2)]);
        markAllRead();
        expect(getUnreadCount()).toBe(0);
    });

    it('markRead clears a single entry', () =>
    {
        setMentions([make(1), make(2)]);
        markRead(1);
        expect(getUnreadCount()).toBe(1);
        expect(getMentionsSnapshot().find(m => m.mentionId === 1)!.read).toBe(true);
    });
});
