import { TIMEOUTS } from '../../utils/timeouts';
import { test, expect } from '../../utils/test-setup';
import { TEST_CREDENTIALS, TEST_TALENT, NAVIGATION_TIMEOUT_MS } from '../../constants/test-data';

/**
 * 首页导航和交互测试 (Story 13.7)
 *
 * 测试目标：验证企业小程序首页 dashboard 的导航和交互功能
 *
 * 功能状态 (2026-01-15):
 * - 底部导航正常工作 (首页/人才/订单/数据/设置)
 * - 人才列表页人才卡片点击可导航到详情页
 * - 首页快捷操作按钮已实现（人才库、数据统计、订单管理、设置）
 * - 首页"查看全部"链接已实现
 * - 首页人才卡片已实现
 *
 * Acceptance Criteria:
 * AC1: 快捷操作按钮导航测试（人才库、数据统计、订单管理、设置）
 * AC2: "查看全部"链接测试
 * AC3: 人才卡片点击测试（列表页和首页均可点击）
 * AC4: 页面跳转验证 - 通过底部导航验证
 * AC5: 交互响应时间（2秒内）
 * AC6: 代码质量标准（TIMEOUTS 常量、data-testid 选择器、TypeScript 类型安全）
 */

// 使用 test.describe.serial 确保测试按顺序执行
test.describe.serial('首页导航和交互测试 - Story 13.7', () => {
  // 每个测试使用独立的浏览器上下文
  test.use({ storageState: undefined });

  // ===== 底部导航测试（已实现功能） =====

  /**
   * AC4.1: 测试场景 - 底部导航跳转到人才页面
   */
  test('应该通过底部导航跳转到人才页面', async ({ enterpriseMiniPage: miniPage }) => {

    // 1. 登录
    await miniPage.goto();
    await miniPage.login(TEST_CREDENTIALS.ENTERPRISE_MINI.phone, TEST_CREDENTIALS.ENTERPRISE_MINI.password);
    await miniPage.expectLoginSuccess();
    await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);

    // 2. 点击底部导航"人才"按钮
    const startTime = Date.now();
    await miniPage.clickBottomNav('talent');
    const navigationTime = Date.now() - startTime;

    // 3. 验证 URL 正确
    await miniPage.expectUrl('/pages/yongren/talent/list/index');

    // 4. 验证响应时间（AC5: 2秒内）
    expect(navigationTime).toBeLessThanOrEqual(NAVIGATION_TIMEOUT_MS);

    console.debug(`[AC4.1] 底部导航跳转到人才页面 ✓ (耗时: ${navigationTime}ms)`);
  });

  /**
   * AC4.2: 测试场景 - 底部导航跳转到订单页面
   */
  test('应该通过底部导航跳转到订单页面', async ({ enterpriseMiniPage: miniPage }) => {

    // 1. 登录
    await miniPage.goto();
    await miniPage.login(TEST_CREDENTIALS.ENTERPRISE_MINI.phone, TEST_CREDENTIALS.ENTERPRISE_MINI.password);
    await miniPage.expectLoginSuccess();
    await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);

    // 2. 点击底部导航"订单"按钮
    const startTime = Date.now();
    await miniPage.clickBottomNav('order');
    const navigationTime = Date.now() - startTime;

    // 3. 验证 URL 正确
    await miniPage.expectUrl('/pages/yongren/order');

    // 4. 验证响应时间
    expect(navigationTime).toBeLessThanOrEqual(NAVIGATION_TIMEOUT_MS);

    console.debug(`[AC4.2] 底部导航跳转到订单页面 ✓ (耗时: ${navigationTime}ms)`);
  });

  /**
   * AC4.3: 测试场景 - 底部导航跳转到数据页面
   */
  test('应该通过底部导航跳转到数据页面', async ({ enterpriseMiniPage: miniPage }) => {

    // 1. 登录
    await miniPage.goto();
    await miniPage.login(TEST_CREDENTIALS.ENTERPRISE_MINI.phone, TEST_CREDENTIALS.ENTERPRISE_MINI.password);
    await miniPage.expectLoginSuccess();
    await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);

    // 2. 点击底部导航"数据"按钮
    const startTime = Date.now();
    await miniPage.clickBottomNav('data');
    const navigationTime = Date.now() - startTime;

    // 3. 验证 URL 正确
    await miniPage.expectUrl('/pages/yongren/statistics/index');

    console.debug(`[AC4.3] 底部导航跳转到数据页面 ✓ (耗时: ${navigationTime}ms)`);
  });

  /**
   * AC4.4: 测试场景 - 底部导航跳转到设置页面
   */
  test('应该通过底部导航跳转到设置页面', async ({ enterpriseMiniPage: miniPage }) => {

    // 1. 登录
    await miniPage.goto();
    await miniPage.login(TEST_CREDENTIALS.ENTERPRISE_MINI.phone, TEST_CREDENTIALS.ENTERPRISE_MINI.password);
    await miniPage.expectLoginSuccess();
    await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);

    // 2. 点击底部导航"设置"按钮
    const startTime = Date.now();
    await miniPage.clickBottomNav('settings');
    const navigationTime = Date.now() - startTime;

    // 3. 验证 URL 正确
    await miniPage.expectUrl('/pages/yongren/settings');

    console.debug(`[AC4.4] 底部导航跳转到设置页面 ✓ (耗时: ${navigationTime}ms)`);
  });

  /**
   * AC4.5: 测试场景 - 返回首页功能
   */
  test('应该可以通过底部导航首页按钮返回首页', async ({ enterpriseMiniPage: miniPage }) => {

    // 1. 登录
    await miniPage.goto();
    await miniPage.login(TEST_CREDENTIALS.ENTERPRISE_MINI.phone, TEST_CREDENTIALS.ENTERPRISE_MINI.password);
    await miniPage.expectLoginSuccess();
    await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);

    // 2. 先导航到其他页面（人才页面）
    await miniPage.clickBottomNav('talent');
    await miniPage.expectUrl('/pages/yongren/talent/list/index');

    // 3. 返回首页
    await miniPage.goBackToHome();

    // 4. 验证首页元素正确显示（注意：由于首页有运行时错误，只验证URL）
    await miniPage.expectUrl('/pages/yongren/dashboard/index');

    console.debug('[AC4.5] 返回首页功能 ✓');
  });

  // ===== AC3: 人才卡片点击测试（列表页功能已实现） =====

  /**
   * AC3: 测试场景 - 点击人才列表页的人才卡片跳转到人才详情
   * 注意：这是从人才列表页点击，不是从首页点击
   */
  test('应该点击人才列表页的人才卡片跳转到人才详情页', async ({ enterpriseMiniPage: miniPage }) => {

    // 1. 登录
    await miniPage.goto();
    await miniPage.login(TEST_CREDENTIALS.ENTERPRISE_MINI.phone, TEST_CREDENTIALS.ENTERPRISE_MINI.password);
    await miniPage.expectLoginSuccess();
    await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);

    // 2. 导航到人才列表页面
    await miniPage.clickBottomNav('talent');
    await miniPage.expectUrl('/pages/yongren/talent/list/index');

    // 3. 点击人才卡片
    const startTime = Date.now();
    await miniPage.clickTalentCardFromList(TEST_TALENT.NAME);
    const navigationTime = Date.now() - startTime;

    // 4. 验证跳转到详情页
    await miniPage.expectUrl('/pages/yongren/talent/detail/index');

    // 5. 验证详情页面显示正确的人才信息
    await miniPage.expectTalentDetailInfo(TEST_TALENT.NAME);

    // 6. 验证响应时间（AC5: 2秒内）
    expect(navigationTime).toBeLessThanOrEqual(NAVIGATION_TIMEOUT_MS);

    console.debug(`[AC3] 人才列表页卡片跳转到详情页 ✓ (耗时: ${navigationTime}ms)`);
  });

  // ===== 综合测试 =====

  /**
   * 测试场景：完整的导航流程
   * 验证首页 → 人才列表 → 人才详情 → 返回首页的完整流程
   */
  test('应该支持完整的导航流程：首页→人才列表→详情→首页', async ({ enterpriseMiniPage: miniPage }) => {

    // 1. 登录
    await miniPage.goto();
    await miniPage.login(TEST_CREDENTIALS.ENTERPRISE_MINI.phone, TEST_CREDENTIALS.ENTERPRISE_MINI.password);
    await miniPage.expectLoginSuccess();
    await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);

    // 2. 从首页导航到人才列表
    await miniPage.clickBottomNav('talent');
    await miniPage.page.waitForURL(
      url => url.hash.includes('/pages/yongren/talent/list/index'),
      { timeout: TIMEOUTS.PAGE_LOAD }
    );

    // 3. 点击人才卡片进入详情页
    await miniPage.clickTalentCardFromList(TEST_TALENT.NAME);
    await miniPage.expectUrl('/pages/yongren/talent/detail/index');

    // 4. 返回首页
    await miniPage.clickBottomNav('home');
    await miniPage.page.waitForURL(
      url => url.hash.includes('/pages/yongren/dashboard/index'),
      { timeout: TIMEOUTS.PAGE_LOAD }
    );

    console.debug('[综合测试] 完整导航流程 ✓');
  });

  // ===== 跳过的测试（未实现功能） =====

  /**
   * AC1.1: 快捷操作按钮 - 人才库按钮测试
   * 任务 3.1: 点击人才库按钮跳转到人才库页面
   */
  test('应该通过快捷操作按钮跳转到人才库页面', async ({ enterpriseMiniPage: miniPage }) => {
    // 1. 登录
    await miniPage.goto();
    await miniPage.login(TEST_CREDENTIALS.ENTERPRISE_MINI.phone, TEST_CREDENTIALS.ENTERPRISE_MINI.password);
    await miniPage.expectLoginSuccess();
    await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);

    // 2. 点击快捷操作按钮"人才库"
    const startTime = Date.now();
    await miniPage.clickQuickAction('talentPool');
    const navigationTime = Date.now() - startTime;

    // 3. 验证 URL 正确
    await miniPage.expectUrl('/pages/yongren/talent/list/index');

    // 4. 验证页面标题
    await miniPage.expectPageTitle('人才');

    // 5. 验证响应时间（AC5: 2秒内）
    expect(navigationTime).toBeLessThanOrEqual(NAVIGATION_TIMEOUT_MS);

    console.debug(`[AC1.1] 快捷操作"人才库"跳转 ✓ (耗时: ${navigationTime}ms)`);
  });

  /**
   * AC1.2: 快捷操作按钮 - 数据统计按钮测试
   * 任务 3.2: 点击数据统计按钮跳转到数据统计页面
   */
  test('应该通过快捷操作按钮跳转到数据统计页面', async ({ enterpriseMiniPage: miniPage }) => {
    // 1. 登录
    await miniPage.goto();
    await miniPage.login(TEST_CREDENTIALS.ENTERPRISE_MINI.phone, TEST_CREDENTIALS.ENTERPRISE_MINI.password);
    await miniPage.expectLoginSuccess();
    await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);

    // 2. 点击快捷操作按钮"数据统计"
    const startTime = Date.now();
    await miniPage.clickQuickAction('dataStats');
    const navigationTime = Date.now() - startTime;

    // 3. 验证 URL 正确
    await miniPage.expectUrl('/pages/yongren/statistics/index');

    // 4. 验证响应时间
    expect(navigationTime).toBeLessThanOrEqual(NAVIGATION_TIMEOUT_MS);

    console.debug(`[AC1.2] 快捷操作"数据统计"跳转 ✓ (耗时: ${navigationTime}ms)`);
  });

  /**
   * AC1.3: 快捷操作按钮 - 订单管理按钮测试
   * 任务 3.3: 点击订单管理按钮跳转到订单管理页面
   */
  test('应该通过快捷操作按钮跳转到订单管理页面', async ({ enterpriseMiniPage: miniPage }) => {
    // 1. 登录
    await miniPage.goto();
    await miniPage.login(TEST_CREDENTIALS.ENTERPRISE_MINI.phone, TEST_CREDENTIALS.ENTERPRISE_MINI.password);
    await miniPage.expectLoginSuccess();
    await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);

    // 2. 点击快捷操作按钮"订单管理"
    const startTime = Date.now();
    await miniPage.clickQuickAction('orderManagement');
    const navigationTime = Date.now() - startTime;

    // 3. 验证 URL 正确
    await miniPage.expectUrl('/pages/yongren/order');

    // 4. 验证响应时间
    expect(navigationTime).toBeLessThanOrEqual(NAVIGATION_TIMEOUT_MS);

    console.debug(`[AC1.3] 快捷操作"订单管理"跳转 ✓ (耗时: ${navigationTime}ms)`);
  });

  /**
   * AC1.4: 快捷操作按钮 - 设置按钮测试
   * 任务 3.4: 点击设置按钮跳转到设置页面
   */
  test('应该通过快捷操作按钮跳转到设置页面', async ({ enterpriseMiniPage: miniPage }) => {
    // 1. 登录
    await miniPage.goto();
    await miniPage.login(TEST_CREDENTIALS.ENTERPRISE_MINI.phone, TEST_CREDENTIALS.ENTERPRISE_MINI.password);
    await miniPage.expectLoginSuccess();
    await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);

    // 2. 点击快捷操作按钮"设置"
    const startTime = Date.now();
    await miniPage.clickQuickAction('settings');
    const navigationTime = Date.now() - startTime;

    // 3. 验证 URL 正确
    await miniPage.expectUrl('/pages/yongren/settings');

    // 4. 验证响应时间
    expect(navigationTime).toBeLessThanOrEqual(NAVIGATION_TIMEOUT_MS);

    console.debug(`[AC1.4] 快捷操作"设置"跳转 ✓ (耗时: ${navigationTime}ms)`);
  });

  /**
   * AC2: "查看全部"链接测试
   * 任务 4.1: 点击查看全部链接跳转到人才列表页面
   * 任务 4.2: 验证跳转后的页面 URL 正确
   * 任务 4.3: 验证跳转后的页面标题正确
   */
  test('应该通过查看全部链接跳转到人才列表页面', async ({ enterpriseMiniPage: miniPage }) => {
    // 1. 登录
    await miniPage.goto();
    await miniPage.login(TEST_CREDENTIALS.ENTERPRISE_MINI.phone, TEST_CREDENTIALS.ENTERPRISE_MINI.password);
    await miniPage.expectLoginSuccess();
    await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);

    // 2. 点击"查看全部"链接
    const startTime = Date.now();
    await miniPage.clickViewAll();
    const navigationTime = Date.now() - startTime;

    // 3. 验证跳转到人才列表页面
    await miniPage.expectUrl('/pages/yongren/talent/list/index');

    // 4. 验证页面标题正确（AC4）
    await miniPage.expectPageTitle('人才');

    // 5. 验证响应时间（AC5: 2秒内）
    expect(navigationTime).toBeLessThanOrEqual(NAVIGATION_TIMEOUT_MS);

    console.debug(`[AC2] "查看全部"链接跳转 ✓ (耗时: ${navigationTime}ms)`);
  });

  /**
   * AC3: 首页人才卡片点击测试
   * 任务 3（来自人才卡片测试）: 点击首页人才卡片跳转到人才详情页
   */
  test('应该点击首页人才卡片跳转到人才详情页', async ({ enterpriseMiniPage: miniPage }) => {
    // 1. 登录
    await miniPage.goto();
    await miniPage.login(TEST_CREDENTIALS.ENTERPRISE_MINI.phone, TEST_CREDENTIALS.ENTERPRISE_MINI.password);
    await miniPage.expectLoginSuccess();
    await miniPage.page.waitForTimeout(TIMEOUTS.MEDIUM);

    // 2. 点击首页人才卡片
    const startTime = Date.now();
    await miniPage.clickTalentCardFromDashboard(TEST_TALENT.NAME);
    const navigationTime = Date.now() - startTime;

    // 3. 验证跳转到人才详情页
    await miniPage.expectUrl('/pages/yongren/talent/detail/index');

    // 4. 验证详情页面显示正确的人才信息
    await miniPage.expectTalentDetailInfo(TEST_TALENT.NAME);

    // 5. 验证响应时间（AC5: 2秒内）
    expect(navigationTime).toBeLessThanOrEqual(NAVIGATION_TIMEOUT_MS);

    console.debug(`[AC3] 首页人才卡片跳转 ✓ (耗时: ${navigationTime}ms)`);
  });
});
