/**
 * Sprint 8 пункт 3 — i18n smoke на стейдже. Playwright headless Chromium
 * по дефолту использует en-US navigator → детектор подхватит en. Поэтому
 * для теста "ru" принудительно ставим fm.lang='ru', для "en" — 'en'.
 */
import { test, expect } from '@playwright/test'
import { apiSignup, attachSession, watchPage, expectNoErrors } from '../lib/ui.js'

test.describe('i18n', () => {
  test.describe.configure({ mode: 'serial' })

  test('S8-3.1 ru — sidebar и dashboard на русском', async ({ page }) => {
    const sess = await apiSignup('i18n31')
    const errs = watchPage(page)
    await attachSession(page, sess, '/dashboard')
    await page.evaluate(() => localStorage.setItem('fm.lang', 'ru'))
    await page.reload()
    await page.waitForLoadState('networkidle')
    await expect(page.locator('aside').getByRole('link', { name: 'Товары' }).first()).toBeVisible({ timeout: 8_000 })
    await expect(page.getByText('Выручка сегодня').first()).toBeVisible()
    expectNoErrors(errs, 'ru')
  })

  test('S8-3.2 en — sidebar и dashboard на английском', async ({ page }) => {
    const sess = await apiSignup('i18n32')
    const errs = watchPage(page)
    await attachSession(page, sess, '/dashboard')
    await page.evaluate(() => localStorage.setItem('fm.lang', 'en'))
    await page.reload()
    await page.waitForLoadState('networkidle')
    await expect(page.locator('aside').getByRole('link', { name: 'Products' }).first()).toBeVisible({ timeout: 8_000 })
    await expect(page.getByText('Revenue today').first()).toBeVisible()
    // На en sidebar НЕ содержит «Товары» (русский)
    expect(await page.locator('aside a').filter({ hasText: 'Товары' }).count()).toBe(0)
    expectNoErrors(errs, 'en')
  })

  test('S8-3.3 переключатель в sidebar меняет язык без reload', async ({ page }) => {
    const sess = await apiSignup('i18n33')
    const errs = watchPage(page)
    await attachSession(page, sess, '/dashboard')
    await page.evaluate(() => localStorage.setItem('fm.lang', 'ru'))
    await page.reload()
    await page.waitForLoadState('networkidle')

    // Найдём select переключателя — он в sidebar после name/role блока
    const langSelect = page.locator('aside select').last()
    await expect(langSelect).toBeVisible({ timeout: 8_000 })
    await langSelect.selectOption('en')
    // Без reload — i18n меняется мгновенно
    await expect(page.locator('aside').getByRole('link', { name: 'Products' }).first()).toBeVisible({ timeout: 5_000 })
    expectNoErrors(errs, 'live switch')
  })
})
