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

test.describe('参数管理完整工作流', () => {
  test.describe.configure({ mode: 'serial' });

  const timestamp = Date.now();
  const configName = `测试配置_${timestamp}`;
  const configKey = `test_config_${timestamp}`;
  const configValue = `test_value_${timestamp}`;

  test('创建参数配置', async ({ page }) => {
    await test.step('导航到参数管理', async () => {
      await page.goto('/dashboard');
      await page.waitForLoadState('domcontentloaded');
      await page.waitForTimeout(1000);
      await page.locator('text=系统管理').waitFor({ state: 'visible', timeout: 5000 });
      await page.locator('text=系统管理').click();
      await page.waitForTimeout(500);
      await page.locator('text=参数管理').waitFor({ state: 'visible', timeout: 5000 });
      await page.locator('text=参数管理').click();
      await page.waitForLoadState('domcontentloaded');
      await expect(page).toHaveURL(/.*config/, { timeout: 15000 });
    });

    await test.step('点击新增配置按钮', async () => {
      await page.locator('button:has-text("新增配置")').click();
      await page.waitForSelector('.el-dialog', { state: 'visible', timeout: 5000 });
    });

    await test.step('填写配置信息', async () => {
      const dialog = page.locator('.el-dialog');
      await dialog.locator('input').first().fill(configName);
      await dialog.locator('input').nth(1).fill(configKey);
      await dialog.locator('input').nth(2).fill(configValue);
    });

    await test.step('提交配置表单', async () => {
      await page.locator('.el-dialog button:has-text("确定")').click();
      await page.waitForSelector('.el-dialog', { state: 'hidden', timeout: 10000 });
      await expect(page.locator('.el-message--success')).toBeVisible({ timeout: 5000 });
    });

    await test.step('验证配置已创建', async () => {
      await page.waitForTimeout(2000);
      const configRow = page.locator(`tr:has-text("${configName}")`);
      await expect(configRow).toBeVisible({ timeout: 15000 });
    });
  });

  test('编辑参数配置', async ({ page }) => {
    const updatedValue = `updated_value_${timestamp}`;

    await test.step('导航到参数管理', async () => {
      await page.goto('/dashboard');
      await page.waitForLoadState('networkidle');
      await page.locator('text=系统管理').click();
      await page.waitForTimeout(500);
      await page.locator('text=参数管理').click();
      await page.waitForLoadState('networkidle');
    });

    await test.step('搜索并编辑配置', async () => {
      const configRow = page.locator(`tr:has-text("${configName}")`);
      await configRow.locator('button:has-text("编辑")').click();
      await page.waitForSelector('.el-dialog', { state: 'visible', timeout: 5000 });
    });

    await test.step('修改配置值', async () => {
      const dialog = page.locator('.el-dialog');
      await dialog.locator('input').nth(2).fill(updatedValue);
    });

    await test.step('提交更新', async () => {
      await page.locator('.el-dialog button:has-text("确定")').click();
      await page.waitForSelector('.el-dialog', { state: 'hidden', timeout: 10000 });
      await expect(page.locator('.el-message--success')).toBeVisible({ timeout: 5000 });
    });

    await test.step('验证配置已更新', async () => {
      await page.waitForTimeout(2000);
      const configRow = page.locator(`tr:has-text("${configName}")`);
      await expect(configRow).toBeVisible({ timeout: 15000 });
    });
  });

  test('删除参数配置', async ({ page }) => {
    await test.step('导航到参数管理', async () => {
      await page.goto('/dashboard');
      await page.waitForLoadState('networkidle');
      await page.locator('text=系统管理').click();
      await page.waitForTimeout(500);
      await page.locator('text=参数管理').click();
      await page.waitForLoadState('networkidle');
    });

    await test.step('搜索并删除配置', async () => {
      const configRow = page.locator(`tr:has-text("${configName}")`);
      await configRow.locator('button:has-text("删除")').click();
      await page.waitForSelector('.el-message-box', { state: 'visible', timeout: 5000 });
    });

    await test.step('确认删除', async () => {
      await page.locator('.el-message-box button:has-text("确定")').click();
      await page.waitForSelector('.el-message-box', { state: 'hidden', timeout: 10000 });
      await expect(page.locator('.el-message--success')).toBeVisible({ timeout: 5000 });
    });

    await test.step('验证配置已删除', async () => {
      await page.waitForTimeout(1000);
      const configRow = page.locator(`tr:has-text("${configName}")`);
      await expect(configRow).not.toBeVisible({ timeout: 5000 });
    });
  });

  test('参数管理权限验证', async ({ page }) => {
    await test.step('验证参数管理页面访问权限', async () => {
      await page.goto('/sys/config');
      await page.waitForLoadState('networkidle');
      
      await expect(page.locator('.el-card')).toBeVisible({ timeout: 5000 });
      await expect(page.locator('button:has-text("新增配置")')).toBeVisible();
    });
  });
});
