import { describe, expect, it } from 'vitest';

import {
  blogPostsLikelyDuplicate,
  sanitizeGeneratedBlogTitle,
} from '../blog-generator';

describe('blog-generator helpers', () => {
  it('replaces banned title motifs with a deterministic fallback', () => {
    const title = sanitizeGeneratedBlogTitle('Ghost Roster Trouble in Boston', {
      league: 'nba',
      homeTeam: 'Boston Celtics',
      awayTeam: 'Miami Heat',
    });

    expect(title).toBe('Why Miami Heat at Boston Celtics is tighter than it looks');
  });

  it('keeps valid generated titles intact', () => {
    const title = sanitizeGeneratedBlogTitle('Why the paint battle decides Knicks at Bulls', {
      league: 'nba',
      homeTeam: 'Chicago Bulls',
      awayTeam: 'New York Knicks',
    });

    expect(title).toBe('Why the paint battle decides Knicks at Bulls');
  });

  it('detects reversed home and away duplicates for the same matchup window', () => {
    const duplicate = blogPostsLikelyDuplicate(
      {
        sport: 'mma',
        gameDate: '2026-03-29',
        homeTeam: 'Alexa Grasso',
        awayTeam: 'Maycee Barber',
        startsAt: '2026-03-29T21:00:00.000Z',
      },
      {
        sport: 'mma',
        game_date: '2026-03-29',
        home_team: 'Maycee Barber',
        away_team: 'Alexa Grasso',
        starts_at: '2026-03-29T21:30:00.000Z',
      },
    );

    expect(duplicate).toBe(true);
  });

  it('detects alias duplicates when one side uses a mascot suffix', () => {
    const duplicate = blogPostsLikelyDuplicate(
      {
        sport: 'ncaab',
        gameDate: '2026-03-29',
        homeTeam: 'Connecticut Huskies',
        awayTeam: 'Duke',
        startsAt: '2026-03-29T23:00:00.000Z',
      },
      {
        sport: 'ncaab',
        game_date: '2026-03-29',
        home_team: 'Duke Blue Devils',
        away_team: 'Connecticut Huskies',
        starts_at: '2026-03-29T22:15:00.000Z',
      },
    );

    expect(duplicate).toBe(true);
  });

  it('rejects lookalike matchups that are too far apart in time', () => {
    const duplicate = blogPostsLikelyDuplicate(
      {
        sport: 'nba',
        gameDate: '2026-03-29',
        homeTeam: 'Los Angeles Lakers',
        awayTeam: 'Golden State Warriors',
        startsAt: '2026-03-29T19:00:00.000Z',
      },
      {
        sport: 'nba',
        game_date: '2026-03-29',
        home_team: 'Golden State Warriors',
        away_team: 'Los Angeles Lakers',
        starts_at: '2026-03-30T02:30:00.000Z',
      },
    );

    expect(duplicate).toBe(false);
  });
});
