// __tests__/utils/test-utils.tsx
import { render, type RenderOptions } from '@testing-library/react';
import { type ReactElement, type ReactNode } from 'react';
import { ReactFlowProvider } from '@xyflow/react';
import useFlowStore from '../../src/pages/VisProgPage/visualProgrammingUI/VisProgStores';

/**
 * Custom render function that wraps components with necessary providers
 * This ensures all components have access to ReactFlow context
 */
export function renderWithProviders(
  ui: ReactElement,
  options?: Omit<RenderOptions, 'wrapper'>
) {
  function Wrapper({ children }: { children: ReactNode }) {
    return <ReactFlowProvider>{children}</ReactFlowProvider>;
  }

  return render(ui, { wrapper: Wrapper, ...options });
}

/**
 * Helper to reset the Zustand store between tests
 * This ensures test isolation
 */
export function resetFlowStore() {
  useFlowStore.setState({
    nodes: [],
    edges: [],
    edgeReconnectSuccessful: true,
  });
}

// Re-export everything from testing library
export * from '@testing-library/react';