/**
 * 学校端 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/tasks*', { timeout: 10000 });
    await page.waitForTimeout(1000);

    // 2. 验证页面标题
    await expect(page.locator('text=任务管理').or(page.locator('text=任务列表')).first()).toBeVisible({ timeout: 5000 });

    // 3. 验证表格加载
    const tableExists = await page.locator('table, .ant-table').count() > 0;
    test.info().annotations.push({
      type: 'info',
      description: `任务表格：${tableExists ? '存在' : '不存在'}`,
    });

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

  test('测试 2: 创建任务', async ({ page }) => {
    test.slow();

    // 1. 进入任务管理页面
    await clickSubMenu(page, '教学管理', '阅读任务');
    await page.waitForURL('**/school/tasks*', { timeout: 10000 });
    await page.waitForTimeout(1000);

    // 2. 点击新建按钮
    const createBtn = page.locator('button:has-text("新建")').or(page.locator('button:has-text("创建")')).or(page.locator('button:has-text("新增")'));
    if (await createBtn.count() > 0) {
      await createBtn.first().click();
      await page.waitForTimeout(500);

      // 3. 验证弹窗显示
      await expect(page.locator('.ant-modal')).toBeVisible({ timeout: 5000 });

      // 4. 填写任务信息
      const taskTitle = `测试任务_${Date.now()}`;
      const titleInput = page.locator('input[placeholder*="任务标题"]').or(page.locator('input[formitemlabel*="标题"]'));
      if (await titleInput.count() > 0) {
        await titleInput.first().fill(taskTitle);
      }

      // 选择任务类型
      const typeSelect = page.locator('.ant-select').filter({ hasText: /任务类型/i }).first();
      if (await typeSelect.count() > 0) {
        await typeSelect.click();
        await page.keyboard.press('ArrowDown');
        await page.keyboard.press('Enter');
      }

      // 选择截止日期
      const deadlineInput = page.locator('input[placeholder*="截止日期"]').or(page.locator('input[formitemlabel*="截止日期"]'));
      if (await deadlineInput.count() > 0) {
        await deadlineInput.first().fill('2026-03-25');
      }

      // 5. 点击确定按钮
      const okBtn = page.locator('button:has-text("确定")').or(page.locator('button:has-text("确认")')).or(page.locator('button:has-text("保存")'));
      if (await okBtn.count() > 0) {
        await okBtn.first().click();
        await page.waitForTimeout(2000);

        // 6. 验证创建成功
        const successMsg = await page.locator('.ant-message-success').count() > 0;
        test.info().annotations.push({
          type: successMsg ? 'success' : 'info',
          description: `创建任务：${successMsg ? '成功' : '完成'}`,
        });
      }
    } else {
      test.info().annotations.push({
        type: 'warning',
        description: '未找到新建任务按钮',
      });
    }
  });

  test('测试 3: 查看任务详情', async ({ page }) => {
    // 1. 进入任务管理页面
    await clickSubMenu(page, '教学管理', '阅读任务');
    await page.waitForURL('**/school/tasks*', { timeout: 10000 });
    await page.waitForTimeout(1000);

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

      // 3. 验证详情显示
      const modalExists = await page.locator('.ant-modal').count() > 0;
      test.info().annotations.push({
        type: 'info',
        description: `任务详情：${modalExists ? '弹窗显示' : '页面显示'}`,
      });
    } else {
      test.info().annotations.push({
        type: 'warning',
        description: '未找到查看按钮',
      });
    }
  });

  test('测试 4: 编辑任务', async ({ page }) => {
    test.slow();

    // 1. 进入任务管理页面
    await clickSubMenu(page, '教学管理', '阅读任务');
    await page.waitForURL('**/school/tasks*', { 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. 验证弹窗显示
      await expect(page.locator('.ant-modal')).toBeVisible({ timeout: 5000 });

      // 4. 保存修改
      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);

        const successMsg = await page.locator('.ant-message-success').count() > 0;
        test.info().annotations.push({
          type: successMsg ? 'success' : 'info',
          description: `编辑任务：${successMsg ? '成功' : '完成'}`,
        });
      }
    } else {
      test.info().annotations.push({
        type: 'warning',
        description: '未找到编辑按钮',
      });
    }
  });

  test('测试 5: 任务筛选功能', async ({ page }) => {
    // 1. 进入任务管理页面
    await clickSubMenu(page, '教学管理', '阅读任务');
    await page.waitForURL('**/school/tasks*', { timeout: 10000 });
    await page.waitForTimeout(1000);

    // 2. 查找筛选器
    const searchInput = page.locator('input[placeholder*="搜索"]').or(page.locator('input[placeholder*="任务标题"]'));
    if (await searchInput.count() > 0) {
      await searchInput.first().fill('测试');
      await page.waitForTimeout(1000);

      test.info().annotations.push({
        type: 'success',
        description: '筛选功能：可用',
      });
    }

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

  test('测试 6: 删除任务', async ({ page }) => {
    test.slow();

    // 1. 进入任务管理页面
    await clickSubMenu(page, '教学管理', '阅读任务');
    await page.waitForURL('**/school/tasks*', { timeout: 10000 });
    await page.waitForTimeout(1000);

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

      // 3. 确认删除
      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);

        test.info().annotations.push({
          type: 'success',
          description: '删除任务：操作完成',
        });
      }
    } else {
      test.info().annotations.push({
        type: 'warning',
        description: '未找到删除按钮',
      });
    }
  });

  test('测试 7: 发布任务', async ({ page }) => {
    test.slow();

    // 1. 进入任务管理页面
    await clickSubMenu(page, '教学管理', '阅读任务');
    await page.waitForURL('**/school/tasks*', { timeout: 10000 });
    await page.waitForTimeout(1000);

    // 2. 查找发布按钮
    const publishBtn = page.locator('button:has-text("发布")').or(page.locator('button:has-text("下发")')).first();
    if (await publishBtn.count() > 0) {
      await publishBtn.click();
      await page.waitForTimeout(1000);

      // 3. 确认发布
      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);

        test.info().annotations.push({
          type: 'success',
          description: '发布任务：操作完成',
        });
      }
    } else {
      test.info().annotations.push({
        type: 'warning',
        description: '未找到发布按钮',
      });
    }
  });
});
