import { describe, test, expect } from 'vitest';
import { HUMAN_PACING, pickScroll } from './pacing.js';

describe('HUMAN_PACING (competitor-matched values)', () => {
  test('matches the competitor CONFIG constants', () => {
    expect(HUMAN_PACING.slowMoMs).toBe(300);
    expect([HUMAN_PACING.scrollWaitMinMs, HUMAN_PACING.scrollWaitMaxMs]).toEqual([5000, 10000]);
    expect([HUMAN_PACING.scrollDistMin, HUMAN_PACING.scrollDistMax]).toEqual([4000, 6000]);
    expect([HUMAN_PACING.profileSettleMinMs, HUMAN_PACING.profileSettleMaxMs]).toEqual([5000, 10000]);
    expect(HUMAN_PACING.longPauseProb).toBe(0.1);
    expect([HUMAN_PACING.longPauseMinMs, HUMAN_PACING.longPauseMaxMs]).toEqual([10000, 20000]);
    expect(HUMAN_PACING.endKeyProb).toBe(0.5);
    expect(HUMAN_PACING.noNewDataLimit).toBe(4);
  });
});

describe('pickScroll (mirrors competitor scroll_page: 50% End key, else scrollBy 4000-6000)', () => {
  test('rnd < endKeyProb -> End key', () => {
    expect(pickScroll(0.0, 0.5)).toEqual({ mode: 'end' });
    expect(pickScroll(0.49, 0.5)).toEqual({ mode: 'end' });
  });
  test('rnd >= endKeyProb -> wheel with distance in [4000,6000]', () => {
    expect(pickScroll(0.5, 0)).toEqual({ mode: 'wheel', distance: 4000 });
    expect(pickScroll(0.9, 1)).toEqual({ mode: 'wheel', distance: 6000 });
    const mid = pickScroll(0.7, 0.5);
    expect(mid.mode).toBe('wheel');
    if (mid.mode === 'wheel') expect(mid.distance).toBe(5000);
  });
});
