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

import { assessPlayerPropClvFit, normalizeClvPropStat } from '../player-prop-clv-profile';

describe('player-prop-clv-profile', () => {
  it('normalizes registry-backed aliases for CLV tracking', () => {
    expect(normalizeClvPropStat('three_pointers_made', 'nba')).toBe('threePointersMade');
    expect(normalizeClvPropStat('goalie_saves', 'nhl')).toBe('saves');
    expect(normalizeClvPropStat('points', 'mlb')).toBe('runs');
  });

  it('treats nhl saves overs as caution fits', () => {
    const profile = assessPlayerPropClvFit({
      league: 'nhl',
      statType: 'goalie_saves',
      recommendation: 'over',
      projectedProbability: 69,
    });

    expect(profile.normalizedStat).toBe('saves');
    expect(profile.eligible).toBe(false);
    expect(profile.fitLabel).toBe('CAUTION');
  });

  it('keeps only backed MLB unders in the tracked pool', () => {
    const tracked = assessPlayerPropClvFit({
      league: 'mlb',
      statType: 'pitching_strikeouts',
      recommendation: 'under',
      confidenceFactor: 0.61,
      odds: -105,
      marketLine: 5.5,
    });
    const rejectedOver = assessPlayerPropClvFit({
      league: 'mlb',
      statType: 'pitching_strikeouts',
      recommendation: 'over',
      confidenceFactor: 0.61,
      odds: -105,
      marketLine: 5.5,
    });
    const trackedHitterUnder = assessPlayerPropClvFit({
      league: 'mlb',
      statType: 'batting_rbi',
      recommendation: 'under',
      confidenceFactor: 0.61,
      odds: -105,
      marketLine: 0.5,
    });
    const trackedWalksAllowed = assessPlayerPropClvFit({
      league: 'mlb',
      statType: 'pitching_basesOnBalls',
      recommendation: 'under',
      confidenceFactor: 0.61,
      odds: -105,
      marketLine: 1.5,
    });
    const trackedEarnedRuns = assessPlayerPropClvFit({
      league: 'mlb',
      statType: 'pitching_earnedRuns',
      recommendation: 'under',
      confidenceFactor: 0.61,
      odds: -105,
      marketLine: 2.5,
    });
    const rejectedPlusMoney = assessPlayerPropClvFit({
      league: 'mlb',
      statType: 'pitching_hits',
      recommendation: 'under',
      confidenceFactor: 0.61,
      odds: 120,
      marketLine: 5.5,
    });
    const rejectedLowLineKs = assessPlayerPropClvFit({
      league: 'mlb',
      statType: 'pitching_strikeouts',
      recommendation: 'under',
      confidenceFactor: 0.61,
      odds: -105,
      marketLine: 3.5,
    });
    const rejectedLowLineHits = assessPlayerPropClvFit({
      league: 'mlb',
      statType: 'pitching_hits',
      recommendation: 'under',
      confidenceFactor: 0.61,
      odds: -105,
      marketLine: 3.5,
    });
    const rejectedWalksTwoPointFive = assessPlayerPropClvFit({
      league: 'mlb',
      statType: 'pitching_basesOnBalls',
      recommendation: 'under',
      confidenceFactor: 0.61,
      odds: -105,
      marketLine: 2.5,
    });
    const rejectedLowEarnedRuns = assessPlayerPropClvFit({
      league: 'mlb',
      statType: 'pitching_earnedRuns',
      recommendation: 'under',
      confidenceFactor: 0.61,
      odds: -105,
      marketLine: 1.5,
    });

    expect(tracked.eligible).toBe(true);
    expect(trackedWalksAllowed.eligible).toBe(true);
    expect(trackedEarnedRuns.eligible).toBe(true);
    expect(trackedHitterUnder.eligible).toBe(false);
    expect(rejectedOver.eligible).toBe(false);
    expect(rejectedPlusMoney.eligible).toBe(false);
    expect(rejectedLowLineKs.eligible).toBe(false);
    expect(rejectedLowLineHits.eligible).toBe(false);
    expect(rejectedWalksTwoPointFive.eligible).toBe(false);
    expect(rejectedLowEarnedRuns.eligible).toBe(false);
  });
});
