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

const LP_URL = process.env.E2E_LP_URL || 'http://localhost:3050';

test.describe('Лендинг (myfitcrm.ru)', () => {
  test('Hero-секция загружается с заголовком и CTA', async ({ page }) => {
    await page.goto(LP_URL);
    await expect(page).toHaveTitle(/MyFitCRM/i);

    // Hero heading
    const heading = page.locator('h1').first();
    await expect(heading).toBeVisible();

    // CTA button
    const cta = page.getByRole('link', { name: /попробовать бесплатно|начать/i }).first();
    await expect(cta).toBeVisible();
  });

  test('Кнопка «Войти» ведёт на /login', async ({ page }) => {
    await page.goto(LP_URL);
    const loginBtn = page.getByRole('link', { name: /войти/i }).first();
    await expect(loginBtn).toBeVisible();
    const href = await loginBtn.getAttribute('href');
    expect(href).toMatch(/login/);
  });

  test('Навигация — якорные ссылки в хедере', async ({ page }) => {
    await page.goto(LP_URL);
    const navLinks = page.locator('header a[href^="#"], header button');
    const count = await navLinks.count();
    expect(count).toBeGreaterThanOrEqual(3);
  });

  test('Секция «Возможности» содержит карточки', async ({ page }) => {
    await page.goto(LP_URL);
    // Look for features section
    const features = page
      .locator('[id*="feature"], section:has(h2:text-matches("возможност", "i"))')
      .first();
    if (await features.isVisible()) {
      const cards = features.locator('[class*="card"], [class*="grid"] > div');
      const count = await cards.count();
      expect(count).toBeGreaterThanOrEqual(3);
    }
  });

  test('Секция «Тарифы» содержит 3 плана', async ({ page }) => {
    await page.goto(LP_URL);
    const pricing = page
      .locator('[id*="pric"], section:has(h2:text-matches("тариф", "i"))')
      .first();
    if (await pricing.isVisible()) {
      const plans = pricing.locator('[class*="card"], [class*="border"]');
      const count = await plans.count();
      expect(count).toBeGreaterThanOrEqual(3);
    }
  });

  test('FAQ-аккордеон раскрывается/сворачивается', async ({ page }) => {
    await page.goto(LP_URL);
    const faqItem = page
      .locator('[id*="faq"] button, details summary, [class*="accordion"] button')
      .first();
    if (await faqItem.isVisible()) {
      await faqItem.click();
      // After click, some content should be visible
      await page.waitForTimeout(300);
    }
  });

  test('Футер содержит копирайт', async ({ page }) => {
    await page.goto(LP_URL);
    const footer = page.locator('footer');
    await expect(footer).toBeVisible();
    const text = await footer.textContent();
    expect(text?.toLowerCase()).toMatch(/myfitcrm|©|2026/);
  });

  test('Мобильная адаптация — бургер-меню (375px)', async ({ page }) => {
    await page.setViewportSize({ width: 375, height: 812 });
    await page.goto(LP_URL);
    // On mobile, the nav links should be hidden or a hamburger should appear
    const burger = page
      .locator(
        'button[aria-label*="menu"], button:has(svg), [class*="burger"], [class*="mobile-menu"]',
      )
      .first();
    // Either burger exists or nav is compacted
    const hasBurger = await burger.isVisible().catch(() => false);
    // At minimum, page should load without errors
    await expect(page.locator('h1').first()).toBeVisible();
    // Burger test is informational — mobile should at least not break
    if (hasBurger) {
      await burger.click();
      await page.waitForTimeout(300);
    }
  });
});
