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

vi.mock('../../db', () => ({
  default: {
    query: vi.fn(),
    end: vi.fn(),
    on: vi.fn(),
  },
}));

vi.mock('../../lib/team-abbreviations', () => ({
  getTeamAbbr: vi.fn(() => 'TST'),
}));

describe('clv-resolver helpers', () => {
  beforeEach(() => {
    vi.resetModules();
  });

  it('normalizes vendor-specific prop types for closing-line lookup', async () => {
    const { normalizePlayerPropLineType } = await import('../clv-resolver');

    expect(normalizePlayerPropLineType('shots', 'nhl')).toBe('shots_onGoal');
    expect(normalizePlayerPropLineType('saves', 'nhl')).toBe('goalie_saves');
    expect(normalizePlayerPropLineType('shots_on_target', 'epl')).toBe('shots_onTarget');
    expect(normalizePlayerPropLineType('stolenBases', 'mlb')).toBe('batting_stolenBases');
    expect(normalizePlayerPropLineType('three_pointers_made', 'nba')).toBe('threePointersMade');
    expect(normalizePlayerPropLineType('points', 'nba')).toBe('points');
  });

  it('prefers full-game rows on the correct side and closest line', async () => {
    const { pickBestPlayerPropLineRow } = await import('../clv-resolver');

    const picked = pickBestPlayerPropLineRow([
      {
        raw_text: 'RJ Barrett 1st Half Points Over/Under',
        period: '1h',
        side: 'over',
        close_line: 10.5,
        is_closing_line: true,
        snapshot_at: '2026-03-31T00:00:00.000Z',
      },
      {
        raw_text: 'RJ Barrett Points Over/Under',
        period: 'game',
        side: 'under',
        close_line: 20.5,
        is_closing_line: true,
        snapshot_at: '2026-03-31T00:05:00.000Z',
      },
      {
        raw_text: 'RJ Barrett Points Over/Under',
        period: 'game',
        side: 'over',
        close_line: 21.5,
        is_closing_line: true,
        snapshot_at: '2026-03-31T00:10:00.000Z',
      },
      {
        raw_text: 'RJ Barrett Points Over/Under Alternate',
        period: 'game',
        side: 'over',
        close_line: 27.5,
        is_closing_line: true,
        snapshot_at: '2026-03-31T00:11:00.000Z',
      },
    ], {
      player_name: 'RJ Barrett',
      direction: 'over',
      rec_line: 20.5,
    });

    expect(picked?.close_line).toBe(21.5);
  });
});
