import React from 'react';
import { renderHook, act } from '@testing-library/react';
import { createTableApi } from 'lib/test-utils/table';
import { TableContext } from '../../../base/context';
import { TableExtensions } from '../../../base/tableExtensions';
import { TableSelectionExtension } from '../tableSelectionExtension';
import { useTableRowSelection } from '../useTableSelection';

TableExtensions.addExtension(TableSelectionExtension);

describe('useTableSelection', () => {
    const createContext = () => createTableApi();

    const render = (context = createContext()) =>
        renderHook(() => useTableRowSelection(), {
            wrapper: ({ children }: { children?: React.ReactNode }) => (
                <TableContext.Provider value={context}>{children}</TableContext.Provider>
            ),
        });

    describe('setSelectedRows', () => {
        test('calls onSelectAllChanged when `selectAll` is enabled', () => {
            const onSelectAllChanged = vi.fn();
            const context = createTableApi(undefined, { onSelectAllChanged });
            const result = render(context);

            act(() => result.result.current.setSelectedRows([], false, 'enabled'));
            expect(onSelectAllChanged).toHaveBeenCalledWith('enabled');
        });

        test('calls onSelectAllChanged when `selectAll` is prompt', () => {
            const onSelectAllChanged = vi.fn();
            const context = createTableApi(undefined, { onSelectAllChanged });
            const result = render(context);

            act(() => result.result.current.setSelectedRows([], false, 'prompt'));
            expect(onSelectAllChanged).toHaveBeenCalledWith('prompt');
        });
    });
});
