/**
 * Tests for the messageContainsMention utility function.
 *
 * The unread counting and lookup logic (shouldIncrementUnread, getUnreadCount)
 * is tested through component-level and integration tests rather than
 * re-implementing the logic locally. See appFavorites.test.tsx, sidebar.test.tsx,
 * and integration.test.ts for those paths.
 */

import { describe, it, expect } from 'vitest';
import { messageContainsMention } from '../utils/messageParser';

describe('messageContainsMention', () => {
  it('returns true when text contains mention of the name', () => {
    expect(messageContainsMention('Hey @[Alice] check this out', 'Alice')).toBe(true);
  });

  it('returns false when text does not contain the mention', () => {
    expect(messageContainsMention('Hey Alice check this out', 'Alice')).toBe(false);
  });

  it('returns false when name is null', () => {
    expect(messageContainsMention('Hey @[Alice] check this out', null)).toBe(false);
  });

  it('returns false when text is empty', () => {
    expect(messageContainsMention('', 'Alice')).toBe(false);
  });

  it('matches case insensitively', () => {
    expect(messageContainsMention('Hey @[ALICE] check this out', 'alice')).toBe(true);
    expect(messageContainsMention('Hey @[alice] check this out', 'ALICE')).toBe(true);
  });

  it('handles emojis in names', () => {
    expect(messageContainsMention('Hey @[FlightlessDt🥝] nice!', 'FlightlessDt🥝')).toBe(true);
    expect(messageContainsMention('Hey @[🎉Party🎉]', '🎉Party🎉')).toBe(true);
  });

  it('handles special regex characters in names', () => {
    expect(messageContainsMention('Hey @[Test.User] hello', 'Test.User')).toBe(true);
    expect(messageContainsMention('Hey @[User+1] hello', 'User+1')).toBe(true);
    expect(messageContainsMention('Hey @[User*Star] hello', 'User*Star')).toBe(true);
    expect(messageContainsMention('Hey @[What?] hello', 'What?')).toBe(true);
  });

  it('does not match partial names', () => {
    expect(messageContainsMention('Hey @[Alice] check this', 'Ali')).toBe(false);
  });

  it('handles mention at start of text', () => {
    expect(messageContainsMention('@[Bob] hello there', 'Bob')).toBe(true);
  });

  it('handles mention at end of text', () => {
    expect(messageContainsMention('hello @[Bob]', 'Bob')).toBe(true);
  });

  it('handles multiple mentions - matches if user is mentioned', () => {
    expect(messageContainsMention('@[Alice] and @[Bob] should see this', 'Alice')).toBe(true);
    expect(messageContainsMention('@[Alice] and @[Bob] should see this', 'Bob')).toBe(true);
    expect(messageContainsMention('@[Alice] and @[Bob] should see this', 'Charlie')).toBe(false);
  });
});
