/**
 * 超管端 E2E 测试 - 系统设置
 */

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

test.describe('系统设置', () => {
  test.beforeEach(async ({ page }) => {
    await loginAsAdmin(page);
    // 导航到系统设置页面
    await page.goto('/admin/settings');
  });

  test.describe('基本设置', () => {
    test('访问系统设置页面', async ({ page }) => {
      // 验证页面 URL
      await expect(page).toHaveURL(/\/admin\/settings/);
    });

    test('查看基本设置表单', async ({ page }) => {
      // 验证基本设置标签页激活
      const basicTab = page.locator('.ant-tabs-tab:has-text("基本设置")');
      await expect(basicTab).toBeVisible();

      // 验证表单字段存在
      await expect(page.getByText('系统名称')).toBeVisible();
      await expect(page.getByText('系统 LOGO')).toBeVisible();
      await expect(page.getByText('系统简介')).toBeVisible();
      await expect(page.getByText('联系电话')).toBeVisible();
      await expect(page.getByText('联系邮箱')).toBeVisible();
    });

    test('修改系统名称', async ({ page }) => {
      // 等待表单加载
      await page.waitForTimeout(500);

      // 修改系统名称
      const nameInput = page.locator('input[placeholder*="系统名称"]');
      if (await nameInput.isVisible()) {
        const originalName = await nameInput.inputValue();
        await nameInput.fill(`${originalName}_测试`);
      }
    });

    test('修改联系电话', async ({ page }) => {
      // 等待表单加载
      await page.waitForTimeout(500);

      // 修改联系电话
      const phoneInput = page.locator('input[placeholder*="联系电话"]');
      if (await phoneInput.isVisible()) {
        await phoneInput.fill('010-12345678');
      }
    });

    test('修改联系邮箱', async ({ page }) => {
      // 等待表单加载
      await page.waitForTimeout(500);

      // 修改联系邮箱
      const emailInput = page.locator('input[placeholder*="联系邮箱"]');
      if (await emailInput.isVisible()) {
        await emailInput.fill('test@example.com');
      }
    });

    test('上传系统 Logo', async ({ page }) => {
      // 等待表单加载
      await page.waitForTimeout(500);

      // 验证上传组件存在
      const uploadButton = page.locator('.ant-upload-picture-card');
      await expect(uploadButton).toBeVisible();
    });

    test('保存基本设置', async ({ page }) => {
      // 等待表单加载
      await page.waitForTimeout(500);

      // 修改系统名称
      const nameInput = page.locator('input[placeholder*="系统名称"]');
      if (await nameInput.isVisible()) {
        await nameInput.fill('测试系统名称');
      }

      // 修改联系电话
      const phoneInput = page.locator('input[placeholder*="联系电话"]');
      if (await phoneInput.isVisible()) {
        await phoneInput.fill('010-12345678');
      }

      // 修改联系邮箱
      const emailInput = page.locator('input[placeholder*="联系邮箱"]');
      if (await emailInput.isVisible()) {
        await emailInput.fill('test@example.com');
      }

      // 点击保存按钮
      const saveButton = page.locator('button:has-text("保存设置")').first();
      if (await saveButton.isVisible()) {
        await saveButton.click();

        // 等待保存结果
        await page.waitForTimeout(2000);
      }
    });
  });

  test.describe('安全设置', () => {
    test('查看安全设置', async ({ page }) => {
      // 点击安全设置标签页
      const securityTab = page.locator('.ant-tabs-tab:has-text("安全设置")');
      await securityTab.click();
      await page.waitForTimeout(500);

      // 验证表单项存在
      await expect(page.getByText('密码强度')).toBeVisible();
      await expect(page.getByText('登录失败限制')).toBeVisible();
      await expect(page.getByText('Token 有效期')).toBeVisible();
      await expect(page.getByText('强制 HTTPS')).toBeVisible();
    });

    test('修改密码强度策略', async ({ page }) => {
      // 点击安全设置标签页
      const securityTab = page.locator('.ant-tabs-tab:has-text("安全设置")');
      await securityTab.click();
      await page.waitForTimeout(500);

      // 选择密码强度
      const highRadio = page.locator('a-radio:has-text("高")');
      if (await highRadio.isVisible()) {
        await highRadio.click();
      }
    });

    test('修改最大登录尝试次数', async ({ page }) => {
      // 点击安全设置标签页
      const securityTab = page.locator('.ant-tabs-tab:has-text("安全设置")');
      await securityTab.click();
      await page.waitForTimeout(500);

      // 修改登录失败限制
      const attemptsInput = page.locator('input[type="number"]').first();
      if (await attemptsInput.isVisible()) {
        await attemptsInput.fill('3');
      }
    });

    test('修改 Token 过期时间', async ({ page }) => {
      // 点击安全设置标签页
      const securityTab = page.locator('.ant-tabs-tab:has-text("安全设置")');
      await securityTab.click();
      await page.waitForTimeout(500);

      // 选择 Token 有效期
      const tokenSelect = page.locator('[placeholder*="Token"]');
      if (await tokenSelect.isVisible()) {
        await tokenSelect.click();
        await page.getByText('30 天').click();
      }
    });

    test('保存安全设置', async ({ page }) => {
      // 点击安全设置标签页
      const securityTab = page.locator('.ant-tabs-tab:has-text("安全设置")');
      await securityTab.click();
      await page.waitForTimeout(500);

      // 选择密码强度为高
      const highRadio = page.locator('a-radio:has-text("高")');
      if (await highRadio.isVisible()) {
        await highRadio.click();
      }

      // 点击保存按钮
      const saveButton = page.locator('button:has-text("保存设置")').last();
      if (await saveButton.isVisible()) {
        await saveButton.click();

        // 等待保存结果
        await page.waitForTimeout(2000);
      }
    });
  });

  test.describe('通知设置', () => {
    test('查看通知设置', async ({ page }) => {
      // 点击通知设置标签页
      const notificationTab = page.locator('.ant-tabs-tab:has-text("通知设置")');
      await notificationTab.click();
      await page.waitForTimeout(500);

      // 验证表单项存在
      await expect(page.getByText('邮件通知')).toBeVisible();
      await expect(page.getByText('邮件服务器')).toBeVisible();
      await expect(page.getByText('邮件端口')).toBeVisible();
      await expect(page.getByText('发件人邮箱')).toBeVisible();
      await expect(page.getByText('短信通知')).toBeVisible();
    });

    test('启用/禁用邮件通知', async ({ page }) => {
      // 点击通知设置标签页
      const notificationTab = page.locator('.ant-tabs-tab:has-text("通知设置")');
      await notificationTab.click();
      await page.waitForTimeout(500);

      // 切换邮件通知开关
      const emailSwitch = page.locator('[placeholder*="邮件通知"] + .ant-switch').or(page.locator('.ant-switch').first());
      if (await emailSwitch.isVisible()) {
        await emailSwitch.click();
      }
    });

    test('配置 SMTP 服务器', async ({ page }) => {
      // 点击通知设置标签页
      const notificationTab = page.locator('.ant-tabs-tab:has-text("通知设置")');
      await notificationTab.click();
      await page.waitForTimeout(500);

      // 填写 SMTP 服务器
      const smtpHostInput = page.locator('input[placeholder*="smtp"]');
      if (await smtpHostInput.isVisible()) {
        await smtpHostInput.fill('smtp.example.com');
      }

      // 填写 SMTP 端口
      const smtpPortInput = page.locator('input[type="number"]').last();
      if (await smtpPortInput.isVisible()) {
        await smtpPortInput.fill('587');
      }

      // 填写发件人邮箱
      const fromEmailInput = page.locator('input[placeholder*="发件人"]');
      if (await fromEmailInput.isVisible()) {
        await fromEmailInput.fill('noreply@example.com');
      }
    });

    test('启用/禁用短信通知', async ({ page }) => {
      // 点击通知设置标签页
      const notificationTab = page.locator('.ant-tabs-tab:has-text("通知设置")');
      await notificationTab.click();
      await page.waitForTimeout(500);

      // 切换短信通知开关
      const smsSwitch = page.locator('[placeholder*="短信通知"] + .ant-switch').or(page.locator('.ant-switch').last());
      if (await smsSwitch.isVisible()) {
        await smsSwitch.click();
      }
    });

    test('保存通知设置', async ({ page }) => {
      // 点击通知设置标签页
      const notificationTab = page.locator('.ant-tabs-tab:has-text("通知设置")');
      await notificationTab.click();
      await page.waitForTimeout(500);

      // 填写 SMTP 服务器
      const smtpHostInput = page.locator('input[placeholder*="smtp"]');
      if (await smtpHostInput.isVisible()) {
        await smtpHostInput.fill('smtp.example.com');
      }

      // 点击保存按钮
      const saveButton = page.locator('button:has-text("保存设置")').last();
      if (await saveButton.isVisible()) {
        await saveButton.click();

        // 等待保存结果
        await page.waitForTimeout(2000);
      }
    });
  });

  test.describe('存储设置', () => {
    test('查看存储设置', async ({ page }) => {
      // 点击存储设置标签页
      const storageTab = page.locator('.ant-tabs-tab:has-text("存储设置")');
      await storageTab.click();
      await page.waitForTimeout(500);

      // 验证表单项存在
      await expect(page.getByText('存储类型')).toBeVisible();
      await expect(page.getByText('上传限制')).toBeVisible();
      await expect(page.getByText('允许的文件类型')).toBeVisible();
    });

    test('选择存储类型', async ({ page }) => {
      // 点击存储设置标签页
      const storageTab = page.locator('.ant-tabs-tab:has-text("存储设置")');
      await storageTab.click();
      await page.waitForTimeout(500);

      // 选择本地存储
      const localRadio = page.locator('a-radio:has-text("本地存储")');
      if (await localRadio.isVisible()) {
        await localRadio.click();
      }

      // 或者选择阿里云 OSS
      const ossRadio = page.locator('a-radio:has-text("阿里云 OSS")');
      if (await ossRadio.isVisible()) {
        await ossRadio.click();
      }
    });

    test('设置最大文件大小', async ({ page }) => {
      // 点击存储设置标签页
      const storageTab = page.locator('.ant-tabs-tab:has-text("存储设置")');
      await storageTab.click();
      await page.waitForTimeout(500);

      // 修改上传限制
      const maxSizeInput = page.locator('input[type="number"]');
      if (await maxSizeInput.isVisible()) {
        await maxSizeInput.fill('50');
      }
    });

    test('设置允许的文件类型', async ({ page }) => {
      // 点击存储设置标签页
      const storageTab = page.locator('.ant-tabs-tab:has-text("存储设置")');
      await storageTab.click();
      await page.waitForTimeout(500);

      // 修改允许的文件类型
      const typesInput = page.locator('input[placeholder*="允许的文件类型"]');
      if (await typesInput.isVisible()) {
        await typesInput.fill('.jpg,.png,.pdf,.doc,.docx,.mp4');
      }
    });

    test('保存存储设置', async ({ page }) => {
      // 点击存储设置标签页
      const storageTab = page.locator('.ant-tabs-tab:has-text("存储设置")');
      await storageTab.click();
      await page.waitForTimeout(500);

      // 选择本地存储
      const localRadio = page.locator('a-radio:has-text("本地存储")');
      if (await localRadio.isVisible()) {
        await localRadio.click();
      }

      // 修改上传限制
      const maxSizeInput = page.locator('input[type="number"]');
      if (await maxSizeInput.isVisible()) {
        await maxSizeInput.fill('50');
      }

      // 点击保存按钮
      const saveButton = page.locator('button:has-text("保存设置")').last();
      if (await saveButton.isVisible()) {
        await saveButton.click();

        // 等待保存结果
        await page.waitForTimeout(2000);
      }
    });
  });
});
