import React from 'react';
import { describe, it, expect, vi, beforeEach } from 'vitest';
import { render, screen } from '@testing-library/react';
import { MemoryRouter } from 'react-router-dom';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { I18nextProvider } from 'react-i18next';
import { ThemeProvider } from '@/app/providers/ThemeProvider';
import '@testing-library/jest-dom';
import MyWorkPage from '@/features/tickets/pages/MyWorkPage';
import { ManDayBadge } from '@/features/projects/components/ManDayBadge';
import i18n from '@/locales/i18n';
import { LocaleProvider } from '@/app/providers/LocaleProvider';

vi.mock('@/features/tickets/services/ticketService', () => ({
  fetchTicket: vi.fn(),
  updateTicket: vi.fn(),
}));
vi.mock('@/features/tickets/services/myWorkService', () => ({
  fetchMyWork: vi.fn().mockResolvedValue({
    widgets: { assigned_count: 1, overdue_count: 0, due_today_count: 0, estimated_md: 3.5 },
    assigned: [],
    collaborating: [],
    watching: [],
    due_today: [],
    due_this_week: [],
    overdue: [],
    recently_updated: [],
  }),
}));
vi.mock('@/shared/components/layout/AppLayout', () => ({
  AppLayout: ({ children }: { children: React.ReactNode }) => <div>{children}</div>,
}));
vi.mock('@/shared/realtime/echoClient', () => ({
  getEcho: () => null,
  isRealtimeEnabled: () => false,
  leaveChannel: vi.fn(),
}));

describe('Man-Day agile UI', () => {
  beforeEach(() => {
    vi.resetModules();
  });

  it('renders ManDayBadge with estimate unit', () => {
    render(
      <I18nextProvider i18n={i18n}>
        <LocaleProvider>
          <ThemeProvider>
            <ManDayBadge value={2.5} />
          </ThemeProvider>
        </LocaleProvider>
      </I18nextProvider>,
    );
    expect(screen.getByText(/2\.5/)).toBeInTheDocument();
    expect(screen.getByText(/pts/i)).toBeInTheDocument();
  });

  it('My Work page has no timer controls', async () => {
    const client = new QueryClient({ defaultOptions: { queries: { retry: false } } });
    render(
      <QueryClientProvider client={client}>
        <I18nextProvider i18n={i18n}>
          <LocaleProvider>
            <ThemeProvider>
              <MemoryRouter>
                <MyWorkPage />
              </MemoryRouter>
            </ThemeProvider>
          </LocaleProvider>
        </I18nextProvider>
      </QueryClientProvider>,
    );
    expect(await screen.findByText(/Estimated \(MD\)|التقدير \(يوم عمل\)/i)).toBeInTheDocument();
    expect(screen.queryByText(/Start Timer|Pause|Resume|Log Time/i)).not.toBeInTheDocument();
  });
});
