import { test, expect } from '@playwright/test';

test.describe('Dashboard Page', () => {
	test.beforeEach(async ({ page }) => {
		// Login first
		await page.goto('/login');
		await page.fill('input[type="email"]', 'superuser@headroom.test');
		await page.fill('input[type="password"]', 'password');
		await page.click('button[type="submit"]');
		
		// Wait for navigation to dashboard
		await page.waitForURL('/dashboard');
	});

	test('dashboard renders correctly', async ({ page }) => {
		// Check page title
		await expect(page).toHaveTitle(/Dashboard/);
		
		// Check PageHeader renders
		await expect(page.locator('h1', { hasText: 'Dashboard' })).toBeVisible();
		await expect(page.getByText('Overview of your resource allocation')).toBeVisible();
		
		// Check New Allocation button
		await expect(page.getByRole('button', { name: /New Allocation/i })).toBeVisible();
		
		// Check all 4 StatCards render
		// Check all 4 StatCards render (use specific selector to avoid matching sidebar/user menu)
		const mainContent = page.getByTestId('layout-content');
		await expect(mainContent.getByText('Active Projects')).toBeVisible();
		await expect(mainContent.getByText('Team Members')).toBeVisible();
		await expect(mainContent.getByText('Allocations (hrs)')).toBeVisible();
		await expect(mainContent.getByText('Avg Utilization')).toBeVisible();
		
		// Check stat values (use exact match to avoid matching '8' in '186' or '87%')
		await expect(page.getByText('14', { exact: true })).toBeVisible(); // Active Projects
		await expect(page.getByText('8', { exact: true })).toBeVisible(); // Team Members
		await expect(page.getByText('186', { exact: true })).toBeVisible(); // Allocations
		await expect(page.getByText('87%')).toBeVisible(); // Avg Utilization
		
		// Check Quick Actions section (scope to main content to avoid sidebar/user menu)
		await expect(mainContent.getByText('Quick Actions')).toBeVisible();
		await expect(mainContent.locator('a[href="/team-members"]')).toBeVisible();
		await expect(mainContent.locator('a[href="/projects"]')).toBeVisible();
		await expect(mainContent.locator('a[href="/allocations"]')).toBeVisible();
		await expect(mainContent.locator('a[href="/reports/forecast"]')).toBeVisible();
		
		// Check Allocation Preview section
		await expect(page.getByRole('heading', { name: 'Allocation Preview' })).toBeVisible();
		await expect(page.getByText(/Allocation matrix for/)).toBeVisible();
	});
});
