import { describe, it, expect, beforeEach, vi } from 'vitest';
import { render, screen, fireEvent, waitFor } from '@testing-library/react';
import { QueryClientProvider } from '@tanstack/react-query';
import { MemoryRouter } from 'react-router';
import { makeClient } from '../test/utils';
import { useAuthStore } from '../stores/authStore';
import SelectContextPage from './SelectContextPage';

vi.mock('react-router', async () => {
  const actual = await vi.importActual<typeof import('react-router')>('react-router');
  return { ...actual, useNavigate: () => vi.fn() };
});

const initial = useAuthStore.getInitialState();

const CONTEXTS = [
  { db_uuid: 'doc-1',    db_key: 'k1', type: 'doctor', role: 'doctor', name: 'مطب شخصی' },
  { db_uuid: 'clinic-1', db_key: 'k2', type: 'clinic', role: 'clinic', name: 'کلینیک تست' },
];

beforeEach(() => {
  localStorage.clear();
  useAuthStore.setState(initial, true);
  useAuthStore.setState({ availableContexts: CONTEXTS as any, switchContext: vi.fn() as any });
});

describe('SelectContextPage', () => {
  /**
   * هر پاسخِ cache شده متعلق به محیط قبلی است. اشتراک روی محیط می‌نشیند، پس بدون
   * پاک کردن cache، مطب شخصی پلن کلینیک را نشان می‌داد و برعکس.
   */
  it('بعد از تعویض محیط، cache کوئری‌ها را پاک می‌کند', async () => {
    const client = makeClient();
    client.setQueryData(['subscription-my', 'doc-1'], { stale: true });

    render(<SelectContextPage />, {
      wrapper: ({ children }) => (
        <QueryClientProvider client={client}>
          <MemoryRouter>{children}</MemoryRouter>
        </QueryClientProvider>
      ),
    });

    fireEvent.click(screen.getByText('کلینیک تست'));

    await waitFor(() => expect(client.getQueryData(['subscription-my', 'doc-1'])).toBeUndefined());
  });
});
