// @ts-check
const { test, expect } = require('@playwright/test');

/**
 * 订阅邮件内容测试
 * 验证邮件模板格式化和到期通知逻辑
 */

test.describe('邮件内容格式化', () => {

  test.beforeEach(async ({ page }) => {
    await page.goto('/?mock=true');
    await page.waitForSelector('#dc-grid > *', { timeout: 10000 });
  });

  // 通过 page.evaluate 测试后端逻辑（需要后端支持）
  // 这里主要测试前端显示的时长格式化

  test('空闲时长格式化 - 分钟', async ({ page }) => {
    // 使用前端 time.js 的 formatDuration 函数
    const result = await page.evaluate(() => {
      return import('./src/js/time.js').then(m => m.formatDuration(300));
    });
    expect(result.text).toBe('5 分钟');
  });

  test('空闲时长格式化 - 小时', async ({ page }) => {
    const result = await page.evaluate(() => {
      return import('./src/js/time.js').then(m => m.formatDuration(7200));
    });
    expect(result.text).toBe('2 小时');
  });

  test('空闲时长格式化 - 小时分钟', async ({ page }) => {
    const result = await page.evaluate(() => {
      return import('./src/js/time.js').then(m => m.formatDuration(5400));
    });
    expect(result.text).toBe('1 小时');
    expect(result.detailed).toBe('1 小时 30 分钟');
  });

  test('空闲时长格式化 - 刚刚', async ({ page }) => {
    const result = await page.evaluate(() => {
      return import('./src/js/time.js').then(m => m.formatDuration(30));
    });
    expect(result.text).toBe('刚刚');
  });
});

test.describe('订阅表单', () => {

  test.beforeEach(async ({ page }) => {
    await page.goto('/?mock=true');
    await page.waitForSelector('#dc-grid > *', { timeout: 10000 });
  });

  test('订阅表单包含充电类型和厂商品牌选择', async ({ page }) => {
    const isWeekend = new Date().getDay() === 0 || new Date().getDay() === 6;

    if (isWeekend) {
      test.skip();
      return;
    }

    await page.click('button:has-text("订阅提醒")');
    await expect(page.locator('#subscribe-modal')).toBeVisible();

    // 验证原有三种充电类型选择
    await expect(page.locator('input[name="charger-type"][value="all"]')).toBeChecked();
    await expect(page.locator('label:has(input[name="charger-type"][value="DC"])')).toBeVisible();
    await expect(page.locator('label:has(input[name="charger-type"][value="AC"])')).toBeVisible();

    // 验证新增三种厂商品牌选择
    await expect(page.locator('input[name="vendor"][value="all"]')).toBeChecked();
    await expect(page.locator('label:has(input[name="vendor"][value="nio"])')).toBeVisible();
    await expect(page.locator('label:has(input[name="vendor"][value="gongniu"])')).toBeVisible();
  });

  test('订阅表单默认选择"不限"和"全部"', async ({ page }) => {
    const isWeekend = new Date().getDay() === 0 || new Date().getDay() === 6;

    if (isWeekend) {
      test.skip();
      return;
    }

    await page.click('button:has-text("订阅提醒")');
    await expect(page.locator('input[name="charger-type"][value="all"]')).toBeChecked();
    await expect(page.locator('input[name="vendor"][value="all"]')).toBeChecked();
  });

  test('订阅表单可以组合选择充电类型和厂商品牌', async ({ page }) => {
    const isWeekend = new Date().getDay() === 0 || new Date().getDay() === 6;

    if (isWeekend) {
      test.skip();
      return;
    }

    await page.click('button:has-text("订阅提醒")');
    await expect(page.locator('#subscribe-modal')).toBeVisible();

    await page.locator('label:has(input[name="charger-type"][value="DC"])').click();
    await page.locator('label:has(input[name="vendor"][value="gongniu"])').click();

    await expect(page.locator('input[name="charger-type"][value="DC"]')).toBeChecked();
    await expect(page.locator('input[name="vendor"][value="gongniu"]')).toBeChecked();
  });

  test('订阅表单有邮箱验证', async ({ page }) => {
    const isWeekend = new Date().getDay() === 0 || new Date().getDay() === 6;

    if (isWeekend) {
      test.skip();
      return;
    }

    await page.click('button:has-text("订阅提醒")');

    // 输入无效邮箱
    await page.locator('#email-input').fill('invalid-email');
    await page.locator('#subscribe-modal button[type="submit"]').click();

    // 应显示错误提示
    await expect(page.locator('#email-error')).toBeVisible();
  });
});
