import { test, expect } from '@playwright/test';
import { login, PORT_SLUG } from './helpers';

test.describe('Audit log read view (Phase B)', () => {
  test.beforeEach(async ({ page }) => {
    await login(page, 'super_admin');
  });

  test('admin audit page renders search + entity + action filters', async ({ page }) => {
    // First-hit dev-mode compile of the upgraded route can exceed 30s.
    await page.goto(`/${PORT_SLUG}/admin/audit`, { timeout: 60_000 });
    await expect(page.getByRole('heading', { name: /audit log/i })).toBeVisible({
      timeout: 30_000,
    });
    await expect(page.getByTestId('audit-search')).toBeVisible({ timeout: 10_000 });
    await expect(page.getByTestId('audit-entity')).toBeVisible();
    await expect(page.getByTestId('audit-action')).toBeVisible();
    // Date filters render alongside.
    await expect(page.getByLabel(/^from$/i)).toBeVisible();
    await expect(page.getByLabel(/^to$/i)).toBeVisible();
  });

  test('audit API returns cursor-paginated rows with the new shape', async ({ page }) => {
    // Pull the port id from the admin/ports list so the audit request can
    // pass X-Port-Id (the audit endpoint scopes results to a single port).
    const portsRes = await page.request.get('/api/v1/admin/ports');
    const portsBody = (await portsRes.json()) as { data: Array<{ id: string }> };
    const portId = portsBody.data[0]?.id;
    expect(portId).toBeTruthy();

    const auditRes = await page.request.get(`/api/v1/admin/audit?limit=5`, {
      headers: { 'X-Port-Id': portId! },
      timeout: 60_000,
    });
    expect(auditRes.status()).toBe(200);
    const body = (await auditRes.json()) as {
      data: Array<{ action: string; entityType: string }>;
      pagination: { nextCursor: { createdAt: string; id: string } | null };
    };
    expect(Array.isArray(body.data)).toBe(true);
    expect(body.pagination).toHaveProperty('nextCursor');
  });
});
