import React from 'react';
import { render, screen } from '@testing-library/react';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { ThemeProvider } from 'styled-components';
import { I18nextProvider } from 'react-i18next';
import { MemoryRouter } from 'react-router-dom';
import { describe, it, expect, vi, beforeEach } from 'vitest';
import '@testing-library/jest-dom';
import AdminAssigneePerformancePage from '@/features/admin/pages/AdminAssigneePerformancePage';
import * as adminService from '@/features/admin/services/adminService';
import i18n from '@/locales/i18n';
import { LocaleProvider } from '@/app/providers/LocaleProvider';
import { lightTheme } from '@/styles/theme';

vi.mock('@/features/admin/services/adminService', () => ({
  fetchAssigneePerformance: vi.fn(),
}));

vi.mock('@/shared/components/layout/AppLayout', () => ({
  AppLayout: ({ children }: { children: React.ReactNode }) => <div>{children}</div>,
}));

function renderPage() {
  const client = new QueryClient({ defaultOptions: { queries: { retry: false } } });
  return render(
    <QueryClientProvider client={client}>
      <ThemeProvider theme={lightTheme}>
        <I18nextProvider i18n={i18n}>
          <LocaleProvider>
            <MemoryRouter>
              <AdminAssigneePerformancePage />
            </MemoryRouter>
          </LocaleProvider>
        </I18nextProvider>
      </ThemeProvider>
    </QueryClientProvider>,
  );
}

describe('AdminAssigneePerformancePage', () => {
  beforeEach(() => {
    vi.clearAllMocks();
  });

  it('shows Assignee performance title, not Users', async () => {
    vi.mocked(adminService.fetchAssigneePerformance).mockResolvedValue([]);

    renderPage();

    expect(await screen.findByRole('heading', { name: /assignee performance/i })).toBeInTheDocument();
  });

  it('renders assignee metrics when data is returned', async () => {
    vi.mocked(adminService.fetchAssigneePerformance).mockResolvedValue([
      {
        assignee_id: 'a1',
        assignee_name: 'Assignee One',
        assignee_email: 'assignee@mountainview-eg.com',
        tickets_handled: 4,
        tickets_closed: 2,
      },
    ]);

    renderPage();

    expect(await screen.findByText('Assignee One')).toBeInTheDocument();
  });
});
