/**
 * 导航与路由 E2E 测试。
 *
 * 验证点：
 * - 默认路由 / → /dashboard 重定向
 * - /log-viewer → /etl-tasks?tab=manager 重定向
 * - 菜单高亮
 * - Tab-URL 同步
 */

import { test, expect } from '@playwright/test';
import { injectAuth, mockAllApis } from './helpers';

test.describe('路由重定向', () => {
  test.beforeEach(async ({ page }) => {
    await injectAuth(page);
    await mockAllApis(page);
  });

  test('/ 重定向到 /dashboard', async ({ page }) => {
    await page.goto('/');
    await expect(page).toHaveURL(/\/dashboard/);
    // 确认 Dashboard 页面已渲染
    await expect(page.locator('text=运行状态').first()).toBeVisible();
  });

  test('/log-viewer 重定向到 /etl-tasks?tab=queue', async ({ page }) => {
    await page.goto('/log-viewer');
    await expect(page).toHaveURL(/\/etl-tasks\?tab=queue/);
  });

  test('未登录时重定向到 /login', async ({ page }) => {
    // 清除 localStorage 中的令牌
    await page.goto('/login', { waitUntil: 'commit' });
    await page.evaluate(() => {
      localStorage.removeItem('access_token');
      localStorage.removeItem('refresh_token');
    });
    await page.goto('/dashboard');
    await expect(page).toHaveURL(/\/login/);
  });
});

test.describe('菜单高亮', () => {
  test.beforeEach(async ({ page }) => {
    await injectAuth(page);
    await mockAllApis(page);
  });

  test('Dashboard 页面菜单高亮"运行状态"', async ({ page }) => {
    await page.goto('/dashboard');
    await expect(page.locator('text=运行状态').first()).toBeVisible();
    // Ant Design Menu 选中项会有 ant-menu-item-selected 类
    const menuItem = page.locator('.ant-menu-item-selected', { hasText: '运行状态' });
    await expect(menuItem).toBeVisible();
  });

  test('ETL 任务页面菜单高亮"ETL 任务管理"', async ({ page }) => {
    await page.goto('/etl-tasks');
    const menuItem = page.locator('.ant-menu-item-selected', { hasText: 'ETL 任务管理' });
    await expect(menuItem).toBeVisible();
  });

  test('触发器管理页面菜单高亮"触发器管理"', async ({ page }) => {
    await page.goto('/triggers');
    const menuItem = page.locator('.ant-menu-item-selected', { hasText: '触发器管理' });
    await expect(menuItem).toBeVisible();
  });
});

test.describe('Tab-URL 同步', () => {
  test.beforeEach(async ({ page }) => {
    await injectAuth(page);
    await mockAllApis(page);
  });

  test('ETL 任务页 Tab 切换同步 URL', async ({ page }) => {
    await page.goto('/etl-tasks');
    await expect(page.locator('text=ETL 任务管理').first()).toBeVisible();

    // 点击"队列"Tab
    await page.locator('[role="tab"]', { hasText: '队列' }).click();
    await expect(page).toHaveURL(/\?tab=queue/);

    // 点击"调度"Tab
    await page.locator('[role="tab"]', { hasText: '调度' }).click();
    await expect(page).toHaveURL(/\?tab=schedule/);

    // 点击"历史"Tab
    await page.locator('[role="tab"]', { hasText: '历史' }).click();
    await expect(page).toHaveURL(/\?tab=history/);

    // 点击"状态"Tab
    await page.locator('[role="tab"]', { hasText: '状态' }).click();
    await expect(page).toHaveURL(/\?tab=status/);

    // 点击"发起"Tab 回到默认
    await page.locator('[role="tab"]', { hasText: '发起' }).click();
    await expect(page).toHaveURL(/\?tab=config/);
  });

  test('触发器管理页 Tab 切换同步 URL', async ({ page }) => {
    await page.goto('/triggers');
    await expect(page.locator('text=触发器管理').first()).toBeVisible();

    // 点击"业务"Tab
    await page.locator('[role="tab"]', { hasText: '业务' }).click();
    await expect(page).toHaveURL(/\?tab=biz/);

    // 点击"AI"Tab
    await page.locator('[role="tab"]', { hasText: 'AI' }).click();
    await expect(page).toHaveURL(/\?tab=ai/);

    // 点击"ETL"Tab
    await page.locator('[role="tab"]', { hasText: 'ETL' }).click();
    await expect(page).toHaveURL(/\?tab=etl/);

    // 回到"全部"Tab
    await page.locator('[role="tab"]', { hasText: '全部' }).click();
    await expect(page).toHaveURL(/\?tab=all/);
  });
});
