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

import { assessPublicGameFit } from '../top-game-profile';

describe('top-game-profile', () => {
  it('keeps non-mlb games ungated', () => {
    const profile = assessPublicGameFit({
      league: 'nba',
      homeTeam: 'Boston Celtics',
      awayTeam: 'Los Angeles Lakers',
      forecastData: {
        forecast_side: 'Boston Celtics',
        spread_edge: 6.5,
        projected_lines: {
          moneyline: { home: -220, away: 180 },
        },
      },
    });

    expect(profile.eligible).toBe(true);
    expect(profile.modelMoneyline).toBe(-220);
    expect(profile.spreadEdge).toBe(6.5);
  });

  it('keeps only the stronger mlb game buckets', () => {
    const keepAligned = assessPublicGameFit({
      league: 'mlb',
      homeTeam: 'Seattle Mariners',
      awayTeam: 'Texas Rangers',
      forecastData: {
        forecast_side: 'Texas Rangers',
        winner_pick: 'Texas Rangers',
        spread_edge: 0.1,
        projected_lines: {
          moneyline: { home: -111, away: 101 },
        },
      },
    });
    const keepSplit = assessPublicGameFit({
      league: 'mlb',
      homeTeam: 'Los Angeles Angels',
      awayTeam: 'Atlanta Braves',
      forecastData: {
        forecast_side: 'Los Angeles Angels',
        winner_pick: 'Atlanta Braves',
        spread_edge: 2.0,
        projected_lines: {
          moneyline: { home: 107, away: -122 },
        },
      },
    });
    const rejectFavorite = assessPublicGameFit({
      league: 'mlb',
      homeTeam: 'Kansas City Royals',
      awayTeam: 'Cleveland Guardians',
      forecastData: {
        forecast_side: 'Kansas City Royals',
        winner_pick: 'Kansas City Royals',
        spread_edge: 10,
        projected_lines: {
          moneyline: { home: 120, away: -132 },
        },
      },
    });
    const rejectHeavyEdge = assessPublicGameFit({
      league: 'mlb',
      homeTeam: 'St. Louis Cardinals',
      awayTeam: 'Washington Nationals',
      forecastData: {
        forecast_side: 'Washington Nationals',
        winner_pick: 'Washington Nationals',
        spread_edge: 6,
        projected_lines: {
          moneyline: { home: -108, away: -102 },
        },
      },
    });
    const rejectSplitHeavyFavorite = assessPublicGameFit({
      league: 'mlb',
      homeTeam: 'Toronto Blue Jays',
      awayTeam: 'Colorado Rockies',
      forecastData: {
        forecast_side: 'Toronto Blue Jays',
        winner_pick: 'Colorado Rockies',
        spread_edge: 1.4,
        projected_lines: {
          moneyline: { home: -220, away: 180 },
        },
      },
    });

    expect(keepAligned.eligible).toBe(true);
    expect(keepAligned.modelMoneyline).toBe(101);
    expect(keepSplit.eligible).toBe(true);
    expect(keepSplit.modelMoneyline).toBe(107);
    expect(rejectFavorite.eligible).toBe(false);
    expect(rejectHeavyEdge.eligible).toBe(false);
    expect(rejectSplitHeavyFavorite.eligible).toBe(false);
  });
});
