/**
 * Sprint UI-deep, пункт 10: OrgAuditLog UI.
 * После действий (создание товара/контрагента/документа) аудит должен
 * показать записи. Diff раскрывается. Фильтры работают.
 */
import { test, expect, request as apiRequest } from '@playwright/test'
import { apiSignup, attachSession, watchPage, expectNoErrors } from '../lib/ui.js'

const BASE = process.env.E2E_ADMIN_URL ?? 'https://test.admin.food-market.kz'

test.describe('UI-10 OrgAuditLog', () => {
  test.describe.configure({ mode: 'serial' })

  test('10.1 после серии действий в audit-log видны записи', async ({ page }) => {
    test.setTimeout(120_000)
    const sess = await apiSignup('aud101')
    const errs = watchPage(page)

    // Засеем демо-данные → много действий в audit
    const ctx = await apiRequest.newContext({
      baseURL: BASE, ignoreHTTPSErrors: true,
      extraHTTPHeaders: { Authorization: `Bearer ${sess.accessToken}` },
    })
    await ctx.post('/api/admin/seed-demo', { data: {} })
    await ctx.dispose()

    await attachSession(page, sess, '/audit-log')
    await page.waitForLoadState('networkidle')

    // Должны быть строки
    await page.locator('tbody tr').first().waitFor({ timeout: 10_000 })
    const count = await page.locator('tbody tr').count()
    expect(count, 'audit-log не пустой после seed').toBeGreaterThan(0)

    expectNoErrors(errs, 'audit log records')
  })

  test('10.2 diff-раздел раскрывается', async ({ page }) => {
    test.setTimeout(60_000)
    const sess = await apiSignup('aud102')
    const errs = watchPage(page)
    const ctx = await apiRequest.newContext({
      baseURL: BASE, ignoreHTTPSErrors: true,
      extraHTTPHeaders: { Authorization: `Bearer ${sess.accessToken}` },
    })
    await ctx.post('/api/admin/seed-demo', { data: {} })
    await ctx.dispose()

    await attachSession(page, sess, '/audit-log')
    await page.waitForLoadState('networkidle')
    await page.locator('tbody tr').first().waitFor({ timeout: 10_000 })

    // <details>/<summary> «показать diff»
    const summary = page.getByText(/показать diff/i).first()
    if (await summary.count() === 0) {
      // Нет diff'ов в записях (только Create без before) — это OK
      return
    }
    await summary.click()
    // После клика должна стать видна структура diff'a (или JSON)
    await page.waitForTimeout(300)
    expectNoErrors(errs, 'audit log diff expand')
  })
})
