import { describe, it, expect, beforeEach, vi } from 'vitest';
import { renderHook, act } from '@testing-library/react';
import { useScrollSync } from '@/hooks/use-scroll-sync';

describe('useScrollSync', () => {
  beforeEach(() => {
    vi.useFakeTimers();
    // Mock performance.now() to return 0 and not auto-advance
    let time = 0;
    vi.spyOn(performance, 'now').mockImplementation(() => time);
  });

  it('throttles editor scroll events to 60fps', () => {
    const onScroll = vi.fn();
    const { result } = renderHook(() => useScrollSync({ onEditorScroll: onScroll }));
    const mockEvt = { currentTarget: { scrollTop: 100, scrollHeight: 1000, clientHeight: 200 } } as any;
    // All calls within the same act() - performance.now() stays at 0
    // First call passes, subsequent calls within FRAME_MS are throttled
    act(() => {
      result.current.handleEditorScroll(mockEvt);
      result.current.handleEditorScroll(mockEvt);
      result.current.handleEditorScroll(mockEvt);
    });
    expect(onScroll).toHaveBeenCalledTimes(1);
  });
});
