/**
 * 教师端 E2E 测试 - 综合流程测试
 */

import { test, expect } from '@playwright/test';
import { loginAsTeacher, clickSubMenu } from './helpers';

test.describe('教师端综合流程测试', () => {
  test.beforeEach(async ({ page }) => {
    await loginAsTeacher(page);
  });

  test('完整教学流程测试', async ({ page }) => {
    test.info().annotations.push({
      type: 'feature',
      description: '测试完整教学流程：课表 → 课程 → 授课 → 反馈',
    });

    // 1. 访问仪表盘
    await page.goto('/teacher/dashboard');
    await page.waitForTimeout(2000);
    test.info().annotations.push({
      type: 'success',
      description: '步骤 1: 仪表盘页面加载成功',
    });

    // 2. 访问我的课表
    await clickSubMenu(page, '教学管理', '我的课表');
    await page.waitForTimeout(2000);
    test.info().annotations.push({
      type: 'success',
      description: '步骤 2: 我的课表页面加载成功',
    });

    // 3. 访问课程列表
    await clickSubMenu(page, '教学管理', '课程列表');
    await page.waitForTimeout(2000);
    test.info().annotations.push({
      type: 'success',
      description: '步骤 3: 课程列表页面加载成功',
    });

    // 4. 访问授课记录
    await clickSubMenu(page, '教学管理', '授课记录');
    await page.waitForTimeout(2000);
    test.info().annotations.push({
      type: 'success',
      description: '步骤 4: 授课记录页面加载成功',
    });

    // 5. 访问班级管理
    await clickSubMenu(page, '班级管理', '班级列表');
    await page.waitForTimeout(2000);
    test.info().annotations.push({
      type: 'success',
      description: '步骤 5: 班级管理页面加载成功',
    });

    // 6. 访问学生管理
    await clickSubMenu(page, '学生管理', '学生列表');
    await page.waitForTimeout(2000);
    test.info().annotations.push({
      type: 'success',
      description: '步骤 6: 学生管理页面加载成功',
    });

    // 7. 访问任务管理
    await clickSubMenu(page, '任务管理', '任务列表');
    await page.waitForTimeout(2000);
    test.info().annotations.push({
      type: 'success',
      description: '步骤 7: 任务管理页面加载成功',
    });

    // 8. 访问成长记录
    await clickSubMenu(page, '成长记录', '成长记录');
    await page.waitForTimeout(2000);
    test.info().annotations.push({
      type: 'success',
      description: '步骤 8: 成长记录页面加载成功',
    });

    test.info().annotations.push({
      type: 'success',
      description: '完整教学流程测试完成！',
    });
  });

  test('验证所有菜单导航', async ({ page }) => {
    const menus = [
      { parent: '首页', child: null, path: '/teacher/dashboard' },
      { parent: '教学管理', child: '我的课表', path: '/teacher/schedule' },
      { parent: '教学管理', child: '课程列表', path: '/teacher/courses' },
      { parent: '教学管理', child: '授课记录', path: '/teacher/lessons' },
      { parent: '班级管理', child: '班级列表', path: '/teacher/classes' },
      { parent: '学生管理', child: '学生列表', path: '/teacher/students' },
      { parent: '任务管理', child: '任务列表', path: '/teacher/tasks' },
      { parent: '成长记录', child: '成长记录', path: '/teacher/growth-records' },
    ];

    for (const menu of menus) {
      if (menu.path) {
        await page.goto(menu.path);
        await page.waitForTimeout(1000);
        test.info().annotations.push({
          type: 'success',
          description: `导航成功：${menu.parent} - ${menu.child || '首页'} (${menu.path})`,
        });
      } else if (menu.parent && menu.child) {
        await clickSubMenu(page, menu.parent, menu.child);
        await page.waitForTimeout(1000);
        test.info().annotations.push({
          type: 'success',
          description: `导航成功：${menu.parent} - ${menu.child}`,
        });
      }
    }

    test.info().annotations.push({
      type: 'success',
      description: '所有菜单导航验证完成！',
    });
  });

  test('验证页面响应式布局', async ({ page }) => {
    // 测试不同屏幕尺寸
    const sizes = [
      { width: 1920, height: 1080 },
      { width: 1366, height: 768 },
      { width: 1024, height: 768 },
    ];

    for (const size of sizes) {
      await page.setViewportSize({ width: size.width, height: size.height });
      await page.goto('/teacher/dashboard');
      await page.waitForTimeout(1000);

      // 检查页面是否正常显示
      const hasContent = await page.locator('.ant-layout-content').count() > 0;
      test.info().annotations.push({
        type: 'info',
        description: `分辨率 ${size.width}x${size.height}: ${hasContent ? '正常' : '异常'}`,
      });
    }
  });
});
