/**
 * 学校端 E2E 测试 - 校本课程包功能
 */

import { test, expect } from '@playwright/test';
import { loginAsSchool, clickSubMenu } from './helpers';
import { SCHOOL_CONFIG } from './fixtures';

test.describe('学校端校本课程包功能', () => {
  test.beforeEach(async ({ page }) => {
    await loginAsSchool(page);
  });

  test('测试 1: 访问校本课程包页面', async ({ page }) => {
    // 1. 点击教学管理 → 校本课程包
    await clickSubMenu(page, '教学管理', '校本课程包');
    await page.waitForURL('**/school-courses*', { timeout: 10000 });
    await page.waitForTimeout(1000);

    // 2. 验证页面标题
    await expect(page.locator('text=我的校本课程包').or(page.locator('text=校本课程包')).first()).toBeVisible({ timeout: 5000 });

    // 3. 检查课程列表
    const courseCards = page.locator('.ant-card, [class*="course-card"]');
    const courseCount = await courseCards.count();

    test.info().annotations.push({
      type: 'info',
      description: `校本课程包数量：${courseCount}`,
    });

    // 截图
    await page.screenshot({ path: 'test-results/school-courses-list.png' });
  });

  test('测试 2: 创建校本课程包', async ({ page }) => {
    test.slow();

    // 1. 进入课程中心
    await clickSubMenu(page, '教学管理', '课程管理');
    await page.waitForURL('**/courses', { timeout: 10000 });
    await page.waitForTimeout(1000);

    // 2. 点击第一个课程卡片
    const firstCourseCard = page.locator('.course-card').first();
    const cardCount = await firstCourseCard.count();

    if (cardCount > 0) {
      await firstCourseCard.click();
      await page.waitForTimeout(2000);

      // 3. 检查"创建校本版本"按钮
      const createBtn = page.locator('button:has-text("创建校本版本")');
      if (await createBtn.count() > 0) {
        const beforeUrl = page.url();

        // 4. 点击创建
        await createBtn.click();

        // 5. 等待跳转到编辑页面
        await page.waitForURL('**/school-courses/**/edit', { timeout: 15000 });
        await page.waitForTimeout(2000);

        const currentUrl = page.url();
        test.info().annotations.push({
          type: 'success',
          description: `创建成功：从 ${beforeUrl} 跳转到 ${currentUrl}`,
        });
      } else {
        test.info().annotations.push({
          type: 'warning',
          description: '未找到"创建校本版本"按钮',
        });
      }
    } else {
      test.info().annotations.push({
        type: 'warning',
        description: '未找到课程卡片',
      });
    }
  });

  test('测试 3: 编辑校本课程包', async ({ page }) => {
    test.slow();

    // 1. 进入校本课程包页面
    await clickSubMenu(page, '教学管理', '校本课程包');
    await page.waitForURL('**/school-courses', { timeout: 10000 });
    await page.waitForTimeout(1000);

    // 2. 查找编辑按钮
    const editBtn = page.locator('button:has-text("编辑")').first();
    if (await editBtn.count() > 0) {
      await editBtn.click();
      await page.waitForTimeout(1000);

      // 3. 验证进入编辑页面
      const url = page.url();
      expect(url).toContain('/edit');

      // 4. 检查步骤导航
      const steps = page.locator('.ant-steps-item, [class*="step"]');
      const stepCount = await steps.count();

      test.info().annotations.push({
        type: 'info',
        description: `编辑步骤数量：${stepCount}`,
      });

      // 5. 保存修改
      const saveBtn = page.locator('button:has-text("保存")').or(page.locator('button:has-text("保存到个人")'));
      if (await saveBtn.count() > 0) {
        await saveBtn.first().click();
        await page.waitForTimeout(2000);
      }

      // 截图
      await page.screenshot({ path: 'test-results/school-course-edit.png' });
    } else {
      test.info().annotations.push({
        type: 'warning',
        description: '未找到可编辑的课程',
      });
    }
  });

  test('测试 4: 查看校本课程详情', async ({ page }) => {
    // 1. 进入校本课程包页面
    await clickSubMenu(page, '教学管理', '校本课程包');
    await page.waitForURL('**/school-courses', { timeout: 10000 });
    await page.waitForTimeout(1000);

    // 2. 查找查看按钮
    const viewBtn = page.locator('button:has-text("查看")').first();
    if (await viewBtn.count() > 0) {
      await viewBtn.click();
      await page.waitForTimeout(2000);

      // 3. 验证详情页
      const url = page.url();
      expect(url).toContain('/school-courses/');

      // 4. 检查详情页内容
      const detailElements = page.locator('text=开始备课').or(page.locator('text=课程介绍'));
      await expect(detailElements.first()).toBeVisible({ timeout: 5000 });

      // 截图
      await page.screenshot({ path: 'test-results/school-course-detail.png' });
    } else {
      test.info().annotations.push({
        type: 'warning',
        description: '未找到可查看的课程',
      });
    }
  });

  test('测试 5: 备课模式', async ({ page }) => {
    test.slow();

    // 1. 进入校本课程包页面
    await clickSubMenu(page, '教学管理', '校本课程包');
    await page.waitForURL('**/school-courses', { timeout: 10000 });
    await page.waitForTimeout(1000);

    // 2. 查找"开始备课"按钮
    const prepareBtn = page.locator('button:has-text("开始备课")').first();
    if (await prepareBtn.count() > 0) {
      await prepareBtn.click();
      await page.waitForTimeout(3000);

      // 3. 验证进入备课模式
      const url = page.url();
      expect(url).toContain('/prepare');

      // 4. 检查备课模式布局
      const navigation = page.locator('aside, [class*="navigation"], [class*="sidebar"]');
      await expect(navigation.first()).toBeVisible({ timeout: 5000 });

      // 5. 检查课程列表
      const lessonItems = page.locator('[class*="lesson"], [class*="course"]');
      const lessonCount = await lessonItems.count();

      test.info().annotations.push({
        type: 'info',
        description: `备课模式课程数量：${lessonCount}`,
      });

      // 截图
      await page.screenshot({ path: 'test-results/school-prepare-mode.png' });
    } else {
      test.info().annotations.push({
        type: 'warning',
        description: '未找到"开始备课"按钮',
      });
    }
  });

  test('测试 6: 删除校本课程包', async ({ page }) => {
    test.slow();

    // 1. 进入校本课程包页面
    await clickSubMenu(page, '教学管理', '校本课程包');
    await page.waitForURL('**/school-courses', { timeout: 10000 });
    await page.waitForTimeout(1000);

    // 2. 记录删除前的课程数量
    const courseCards = page.locator('.ant-card, [class*="course"]');
    const beforeCount = await courseCards.count();

    // 3. 查找删除按钮
    const deleteBtn = page.locator('button:has-text("删除")').first();
    if (await deleteBtn.count() > 0) {
      await deleteBtn.click();
      await page.waitForTimeout(1000);

      // 4. 确认删除
      const confirmBtn = page.locator('button:has-text("确定")').or(page.locator('button:has-text("确认")'));
      if (await confirmBtn.count() > 0) {
        await confirmBtn.first().click();
        await page.waitForTimeout(2000);

        // 5. 验证删除
        const afterCount = await courseCards.count();
        test.info().annotations.push({
          type: 'info',
          description: `删除前：${beforeCount}, 删除后：${afterCount}`,
        });
      }
    } else {
      test.info().annotations.push({
        type: 'warning',
        description: '未找到删除按钮',
      });
    }
  });

  test('测试 7: 筛选功能', async ({ page }) => {
    // 1. 进入校本课程包页面
    await clickSubMenu(page, '教学管理', '校本课程包');
    await page.waitForURL('**/school-courses', { timeout: 10000 });
    await page.waitForTimeout(1000);

    // 2. 查找筛选器
    const personalFilter = page.locator('text=个人').or(page.locator('[role="tab"]:has-text("个人")'));
    const schoolFilter = page.locator('text=校本').or(page.locator('[role="tab"]:has-text("校本")'));

    if (await personalFilter.count() > 0) {
      // 3. 点击"个人"筛选
      await personalFilter.first().click();
      await page.waitForTimeout(1000);

      // 4. 点击"校本"筛选
      if (await schoolFilter.count() > 0) {
        await schoolFilter.first().click();
        await page.waitForTimeout(1000);
      }

      test.info().annotations.push({
        type: 'success',
        description: '筛选功能测试完成',
      });
    } else {
      test.info().annotations.push({
        type: 'warning',
        description: '未找到筛选器',
      });
    }

    // 截图
    await page.screenshot({ path: 'test-results/school-course-filter.png' });
  });
});
