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

/**
 * Helpers de mídia do e2e (ADR-026): o upload do catálogo é o caminho real (formulário único, sem
 * JS) e o **id** só é exposto no formulário de arquivamento do card. Compartilhado pelas histórias
 * 29 (destaques no painel) e 32 (banner com vigência no portal).
 */

/** PNG 1×1 válido (o pipeline de variantes aceita imagem minúscula). */
export const PNG_1X1 = Buffer.from(
  'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==',
  'base64',
);

/** Sobe uma imagem no catálogo (formulário único, sem JS) e devolve o id do catálogo. */
export async function uploadMedia(page: Page, alt: string): Promise<string> {
  await page.goto('/galeria');

  await page.locator('input[name="file"]').setInputFiles({
    name: `destaque-${Date.now()}.png`,
    mimeType: 'image/png',
    buffer: PNG_1X1,
  });
  const altField = page.locator('input[name="alt"]');
  await altField.fill(alt);

  await Promise.all([page.waitForURL(/\/galeria$/), altField.press('Enter')]);

  const card = page.locator('li', { hasText: alt });
  await expect(card).toHaveCount(1);

  const action = await card
    .locator('form[action$="/arquivar"], form[action$="/restaurar"]')
    .first()
    .getAttribute('action');
  const id = action?.match(/\/galeria\/([0-9a-f-]{36})\//)?.[1];

  expect(id, 'id do catálogo de mídia não encontrado no card').toBeTruthy();

  return id as string;
}
